第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

從內(nèi)部訪問外部結(jié)構(gòu)

從內(nèi)部訪問外部結(jié)構(gòu)

Go
開心每一天1111 2022-05-18 09:44:22
我有一個與此類似的問題:從嵌入式 struct 訪問 struct 字段,但不是嵌入式結(jié)構(gòu),而是只有一個嵌套結(jié)構(gòu)?;旧?,我需要的是從嵌套結(jié)構(gòu)訪問外部結(jié)構(gòu)的可能性。但是,在接受的答案中建議的組合方法不適合我當(dāng)前的“結(jié)構(gòu)結(jié)構(gòu)”,因此如果沒有一些繁瑣的重構(gòu),它實際上并不適用。相反,我想出了將指向外部結(jié)構(gòu)的指針嵌入到內(nèi)部結(jié)構(gòu)中的想法: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}所以,現(xiàn)在我想知道,從意識形態(tài)上講,這是否是 Go 的有效方法?這種方法有什么可能的缺點嗎?
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊

擁有指向外部結(jié)構(gòu)的指針是唯一的方法。缺點是您必須確保指針已初始化。所以,像構(gòu)造函數(shù)這樣的東西可能會有所幫助:


func NewOuter() *Outer {

  ret:=Outer{}

  ret.outer=&ret

  return &ret

}

此外,您必須注意如何傳遞Outer,因為內(nèi)部結(jié)構(gòu)中的指針可能最終指向您不期望的 Outer 實例:


func f(o Outer) {

   g(&o)

}

上面,g將獲得一個實例,Outer其指針指向與Outer它所獲得的實例不同的實例。


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

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊

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

請參閱 sync.Mutex 或 WaitGroup 以了解如何制作無法復(fù)制的結(jié)構(gòu)。


查看完整回答
反對 回復(fù) 2022-05-18
  • 2 回答
  • 0 關(guān)注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號