我有一个与此类似的问题:从嵌入式 struct 访问 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 的有效方法?这种方法有什么可能的缺点吗?
2 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。所以,像构造函数这样的东西可能会有所帮助:
func NewOuter() *Outer {
ret:=Outer{}
ret.outer=&ret
return &ret
}
此外,您必须注意如何传递Outer,因为内部结构中的指针可能最终指向您不期望的 Outer 实例:
func f(o Outer) {
g(&o)
}
上面,g将获得一个实例,Outer其指针指向与Outer它所获得的实例不同的实例。
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
如果你真的想这样做,你需要确保你永远不要复制 Outer,因为副本的 Inner 将指向错误的 Outer。
请参阅 sync.Mutex 或 WaitGroup 以了解如何制作无法复制的结构。
- 2 回答
- 0 关注
- 61 浏览
添加回答
举报
0/150
提交
取消