我的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/

10-13 08:32