在Go语言中,fmt.Println
函数用于打印信息到标准输出。当你使用 fmt.Println
打印一个变量时,你可以选择打印变量的值或者变量的地址。这里的区别主要在于你是想要打印一个指针指向的值,还是打印指针本身的值(即内存地址)。
-
fmt.Println(*ps3)
:- 这里
*ps3
是对指针ps3
进行了解引用操作,它获取了ps3
指向的Person
结构体的值。 - 因此,
fmt.Println(*ps3)
会打印出Person
结构体的值,包括其所有字段的值。
- 这里
-
fmt.Println(&ps3)
:- 这里
&ps3
是取ps3
的地址,它获取了指针ps3
自身在内存中的地址。 - 因此,
fmt.Println(&ps3)
会打印出指针ps3
的内存地址,而不是它指向的Person
结构体的值。
- 这里
举个例子,如果你有一个 Person
结构体,它可能看起来像这样:
type Person struct {
Name string
Age int
}
如果你创建了一个 Person
实例:
ps3 := new(Person)
fmt.Println(*ps3)
会打印出{ }
,因为new(Person)
会分配内存并初始化Person
的字段为零值(对于字符串是空字符串,对于整数是0)。fmt.Println(&ps3)
会打印出类似0x123456
的内存地址,这是ps3
指针在内存中的位置。
总结来说,*ps3
用于获取指针指向的值,而 &ps3
用于获取指针本身的地址。