Go 从内部进入外部结构
我有一个与此类似的问题:,除了有一个嵌套结构,而不是嵌入式结构 基本上,我需要的是从嵌套结构访问外部结构的可能性。然而,在公认的答案中建议的组合方法不适合我当前的结构结构,因此如果没有一些繁琐的重构,它就不适用 相反,我想到了将指向外部结构的指针嵌入内部结构的想法: 类型外部结构{ someField int 内部结构内部 } 类型内部结构{ 外部构造*外部 } func检验{ 外部:=外部{someField:123} 内部:=内部{outerStruct:&outer} outer.innerStruct=内部 printlniner.outerStruct.someField//仅用于测试 }Go 从内部进入外部结构,go,Go,我有一个与此类似的问题:,除了有一个嵌套结构,而不是嵌入式结构 基本上,我需要的是从嵌套结构访问外部结构的可能性。然而,在公认的答案中建议的组合方法不适合我当前的结构结构,因此如果没有一些繁琐的重构,它就不适用 相反,我想到了将指向外部结构的指针嵌入内部结构的想法: 类型外部结构{ someField int 内部结构内部 } 类型内部结构{ 外部构造*外部 } func检验{ 外部:=外部{someField:123} 内部:=内部{outerStruct:&outer} outer.inne
所以,现在我想知道,在意识形态上,这是否是围棋的有效方法?这种方法有任何可能的缺点吗?拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。因此,类似构造函数的功能可能会有所帮助:
func NewOuter() *Outer {
ret:=Outer{}
ret.outer=&ret
return &ret
}
此外,您还必须注意如何传递Outer,因为内部结构中的指针可能最终指向您不期望的Outer实例:
func f(o Outer) {
g(&o)
}
上面,g将获得一个外部实例,其指针指向的外部实例与它得到的外部实例不同。如果您真的要这样做,您需要确保永远不要复制外部实例,因为副本的内部将指向错误的外部实例
请参阅sync.Mutex或WaitGroup,了解如何创建无法复制的结构。它在技术上是有效的,是否好是主观意见的问题。可能的缺点可能是显而易见的——以指向错误的外部对象的指针结束,或者没有指向外部对象的指针结束,或者在不需要外部对象后保留内部对象及其指针以防止外部对象被GC’d,诸如此类的事情。我通常认为,如果你需要这个,你的设计可能需要工作;内部与外部紧密耦合,这是一个坏迹象。