我有一個與此類似的問題:從嵌入式 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 關注
- 76 瀏覽
添加回答
舉報
0/150
提交
取消