如何在golang中正确打印指针变量

use*_*400 6 pointers go

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有相同的结果?

Vit*_*rio 5

tom是一个指向 a 的指针person。当您使用 时&tom,您正在创建第二个指针,这是一个指向人员的指针。

在第一个示例中,您使用%+v打印默认值tom。默认值遵循指针并打印结构本身。

在第二个示例中,%+v应用于“双”指针。它仍然遵循指针,到达初始指针。请参阅此示例: http: //play.golang.org/p/IZThhkiQXM