go - 从内部进入外部结构

标签 go

我有一个与此问题类似的问题:accessing struct fields from embedded struct,除了一个嵌入式结构而不是嵌入式结构。

基本上,我需要的是可以从嵌套结构访问外部结构的可能性。但是,在接受的答案中建议的组合方法不适合我当前的“结构结构”,因此,如果不进行一些繁琐的重构,它实际上是不适用的。

相反,我想到了将指向外部结构的指针嵌入内部结构的想法:

type Outer struct {
    someField   int
    innerStruct Inner
}

type Inner struct {
    outerStruct *Outer
}

func test() {
    outer := Outer{someField:123}
    inner := Inner{outerStruct:&outer}
    outer.innerStruct = inner
    println(inner.outerStruct.someField) // just to test
}

因此,现在我想知道,从意识形态上讲,这对于Go是否有效?并且此方法是否有任何缺点?

最佳答案

拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。因此,类似构造函数的方法可能会有所帮助:

func NewOuter() *Outer {
  ret:=Outer{}
  ret.outer=&ret
  return &ret
}

另外,您还必须注意如何传递Outer,因为内部结构中的指针可能最终指向您不期望的Outer实例:
func f(o Outer) {
   g(&o)
}

在上面,g将获得Outer的一个实例,并带有一个指向Outer的实例的指针,该实例与其获得的实例不同。

关于go - 从内部进入外部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171781/

相关文章:

go - 将字符串日期 (Month, Year) 转换为 time.Time

arrays - 跟踪并显示下载文件摘要(百分比) - Go lang

go - golang bigquery文档指定完成操作符,但生成编译错误

戈朗 : Constant increase (Memory Leak) in allocated heap with net/http,

unit-testing - 当连接位于结构中时,我应该如何在 Go 中模拟 Redis 连接?

google-app-engine - 如何过滤 GAE 查询?

templates - Golang http/模板变量

go - 如何在Golang Revel框架下运行角度构建

json - Docusign API 使用模板和模板中的自定义字段未通过 HttpRequest 填充

go - 是否有可能在 Golang 中制作类型泛型(模板)函数