如下所示,我創建實例并添加到切片中。我想保留實例的內存地址,但事實并非如此。type Person struct { name string}func main() { p := Person{name: "foo"} ps1 := []Person{p} ps2 := []Person{p} fmt.Printf("%p\n", &p) // 0xc000010250 fmt.Printf("%p\n", &ps1[0]) // 0xc000010260 fmt.Printf("%p\n", &ps2[0]) // 0xc000010270}我知道如果我使用指針和指針切片是可能的。type Person struct { name string}func main() { p := Person{name: "foo"} ps1 := []*Person{&p} ps2 := []*Person{&p} fmt.Printf("%p\n", &p) // 0xc00010a210 fmt.Printf("%p\n", ps1[0]) // 0xc00010a210 fmt.Printf("%p\n", ps2[0]) // 0xc00010a210}但是,我想將 ps1 和 ps2 作為 []Person 的類型,因為將遵循的方法的參數類型(不在這里)。有什么辦法嗎?
2 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
Go 程序中定義的每個變量都占據一個唯一的內存位置。不可能創建一個 Go 程序,其中兩個變量在內存中共享相同的存儲位置??梢詣摻▋蓚€內容指向相同存儲位置的變量,但這與共享相同存儲位置的兩個變量不同。
ps1[0]
所以簡而言之,不,如果你想ps2[0]
指向內存中的同一個位置,你必須使用[]*Person

qq_笑_17
TA貢獻1818條經驗 獲得超7個贊
不,你不能。切片是一個連續的內存塊。局部變量被分配到任意可用的內存地址。mySlice[0]
并且mySlice[1]
將始終在相鄰的內存中,它們不能每個指向恰好分配了不同局部變量的某個隨機位置。
我想保留實例的內存地址
在實踐中沒有理由需要或想要這個。如果你認為你需要這個,你應該回顧你的推理并確定你真正需要什么。
- 2 回答
- 0 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消