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

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

Go:通過指針刪除對象

Go:通過指針刪除對象

Go
慕桂英546537 2022-01-04 10:39:07
我目前正在學(xué)習(xí) golang,并有以下代碼。這個想法是讓一個對象有多個指向它的指針,我想使用其中一個指針修改和刪除該對象。package mainimport "fmt"type obj struct {    a int    b string}func main() {    o1 := &obj{1, "hello"}    o2 := &obj{2, "world"}    m := map[string]*obj{        "foo": o1,        "bar": o2,    }    fmt.Printf("1: %t %v\n", o1, o1)    fmt.Println("2:", m, m["foo"], o1)    o1.b = "WWWW"    fmt.Println("3:", m, m["foo"], o1)    o1 = nil    fmt.Println("4:", m, m["foo"], o1)}http://play.golang.org/p/lqQviVuTQN輸出:1: &{%!t(int=1) %!t(string=hello)} &{1 hello}2: map[foo:0x10434120 bar:0x10434130] &{1 hello} &{1 hello}3: map[foo:0x10434120 bar:0x10434130] &{1 WWWW} &{1 WWWW}4: map[foo:0x10434120 bar:0x10434130] &{1 WWWW} <nil>更改對象的內(nèi)部結(jié)構(gòu)按我的預(yù)期工作(#3)。但是,當(dāng)我嘗試刪除實(shí)際對象(#4)時,它似乎只是nil指針本身而不觸及實(shí)際對象。我錯過了什么?
查看完整描述

2 回答

?
GCT1015

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

Go 中的所有賦值都是按值復(fù)制的。


 m := map[string]*obj{

        "foo": o1,

        "bar": o2,

    }

是一個賦值,所以 foo 的值是 o1 的一個副本。為了實(shí)現(xiàn)你的目標(biāo),你需要多一層間接


o1 := &obj{1, "hello"}

o2 := &obj{2, "world"}


    m := map[string]**obj{

        "foo": &o1,

        "bar": &o2,

    }

http://play.golang.org/p/XutneOziaM


查看完整回答
反對 回復(fù) 2022-01-04
?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個贊

解釋@Uvelichitel 關(guān)于按值復(fù)制的說明,


o1 := <0x10434120>

m := map[string]*obj{

    "foo": <0x10434120>,

}


o1.a = "WWW" // <0x10434120>.a = "WWW" changing both places


o1 = nil

m["foo"] // still is <0x10434120>


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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