亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從內部訪問外部結構

從內部訪問外部結構

Go
開心每一天1111 2022-05-18 09:44:22
我有一個與此類似的問題:從嵌入式 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它所獲得的實例不同的實例。


查看完整回答
反對 回復 2022-05-18
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

如果你真的想這樣做,你需要確保你永遠不要復制 Outer,因為副本的 Inner 將指向錯誤的 Outer。

請參閱 sync.Mutex 或 WaitGroup 以了解如何制作無法復制的結構。


查看完整回答
反對 回復 2022-05-18
  • 2 回答
  • 0 關注
  • 76 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號