我如何从golang中的切片获取结构指针
How can I get a struct pointer from a slice in golang
代码如下:
package main
import (
"fmt"
)
type demo struct {
name string
}
func main() {
demo_slice := make([]demo, 3)
demo_slice[0] = demo{"str1"}
demo_slice[1] = demo{"str2"}
demo_slice[2] = demo{"str3"}
point_demo_slice := make([]*demo, 3)
for index, value := range demo_slice {
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
point_demo_slice[index] = &value
}
}
结果:
{str1}==++++++++++++++0x20818a220
{str2}==++++++++++++++0x20818a220
{str3}==++++++++++++++0x20818a220
0x20818a220
是最后一个元素的指针值。
为什么所有的指针值都一样?
如何获得正确的指针值?
您指的不是切片的元素,而是局部 value
变量:
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
因此所有指针值都将相同(局部变量的地址value
)。如果你想要指向切片元素的指针,那么取相应元素的地址:
fmt.Printf("\n%v==++++++++++++++%p\n", demo_slice[index], &demo_slice[index])
这将产生以下输出,所有指针都不同:
{str1}==++++++++++++++0x104342e0
{str2}==++++++++++++++0x104342e8
{str3}==++++++++++++++0x104342f0
代码如下:
package main
import (
"fmt"
)
type demo struct {
name string
}
func main() {
demo_slice := make([]demo, 3)
demo_slice[0] = demo{"str1"}
demo_slice[1] = demo{"str2"}
demo_slice[2] = demo{"str3"}
point_demo_slice := make([]*demo, 3)
for index, value := range demo_slice {
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
point_demo_slice[index] = &value
}
}
结果:
{str1}==++++++++++++++0x20818a220
{str2}==++++++++++++++0x20818a220
{str3}==++++++++++++++0x20818a220
0x20818a220
是最后一个元素的指针值。
为什么所有的指针值都一样?
如何获得正确的指针值?
您指的不是切片的元素,而是局部 value
变量:
fmt.Printf("\n%v==++++++++++++++%p\n", value, &value)
因此所有指针值都将相同(局部变量的地址value
)。如果你想要指向切片元素的指针,那么取相应元素的地址:
fmt.Printf("\n%v==++++++++++++++%p\n", demo_slice[index], &demo_slice[index])
这将产生以下输出,所有指针都不同:
{str1}==++++++++++++++0x104342e0
{str2}==++++++++++++++0x104342e8
{str3}==++++++++++++++0x104342f0