如下所示,我创建实例并添加到切片中。我想保留实例的内存地址,但事实并非如此。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 关注
- 119 浏览
添加回答
举报
0/150
提交
取消