猿问

从内部访问外部结构

我有一个与此类似的问题:从嵌入式 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 的有效方法?这种方法有什么可能的缺点吗?


开心每一天1111
浏览 62回答 2
2回答

慕码人2483693

拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。所以,像构造函数这样的东西可能会有所帮助:func NewOuter() *Outer {  ret:=Outer{}  ret.outer=&ret  return &ret}此外,您必须注意如何传递Outer,因为内部结构中的指针可能最终指向您不期望的 Outer 实例:func f(o Outer) {   g(&o)}上面,g将获得一个实例,Outer其指针指向与Outer它所获得的实例不同的实例。

尚方宝剑之说

如果你真的想这样做,你需要确保你永远不要复制 Outer,因为副本的 Inner 将指向错误的 Outer。请参阅 sync.Mutex 或 WaitGroup 以了解如何制作无法复制的结构。
随时随地看视频慕课网APP

相关分类

Go
我要回答