type person struct{}
var tom *person = &person{}
Run Code Online (Sandbox Code Playgroud)
我用的时候
fmt.Printf("%+v\n", tom)//prints:&{}
Run Code Online (Sandbox Code Playgroud)
为什么结果是&加数据?它被认为是一个地址(0x0055)
我用的时候
fmt.Printf("%+v\n", &tom)//0x0038
fmt.Printf("%p\n", &tom)//0x0038
Run Code Online (Sandbox Code Playgroud)
它给了我一个地址,它给了我0x0038,为什么%v和%p有相同的结果?
tom
是一个指向 a 的指针person
。当您使用 时&tom
,您正在创建第二个指针,这是一个指向人员的指针。
在第一个示例中,您使用%+v
打印默认值tom
。默认值遵循指针并打印结构本身。
在第二个示例中,%+v
应用于“双”指针。它仍然遵循指针,到达初始指针。请参阅此示例: http: //play.golang.org/p/IZThhkiQXM