我的Go代码:
package main
import (
"fmt"
)
type Point struct {
x int
y int
}
func main() {
fmt.Println(&Point{1, 2})
fmt.Printf("%v\n", &Point{1, 2})
fmt.Printf("%p\n", &Point{1, 2})
}
输出:&{1 2}
&{1 2}
0xc00002c070
这与https://godoc.org/fmt中的文档不匹配。该文件说,根据上面的文档,对于指针,使用
%v
的行为应类似于使用%p
的行为。为什么
fmt.Printf("%v\n", &Point{1, 2})
的输出与fmt.Printf("%p\n", &Point{1, 2})
的输出不匹配? 最佳答案
您引用了 fmt
软件包文档的某些部分,只是“不够”。您的报价的继续:
*Point
是指向struct的指针,因此使用&{field0 field1 ...}
打印。
指向结构的指针在Go中很常见,大多数情况下,在打印时,您对指针的值并不感兴趣,而对指向的结构(或指向的结构的字段)不感兴趣。因此,fmt
程序包有一条规则来打印大多数用户希望看到的内容。如果确实需要该地址,则可以使用%p
进行打印,如示例所示。
关于pointers - fmt.Printf()格式说明符以默认格式打印指向结构的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63337411/