【发布时间】:2020-08-10 09:20:01
【问题描述】:
我的 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 的默认格式是:
bool: %t int, int8 etc.: %d uint, uint8 etc.: %d, %#x if printed with %#v float32, complex64, etc: %g string: %s chan: %p pointer: %p
根据上述文档,对于指针,使用 %v 的行为应该类似于使用 %p。
那为什么fmt.Printf("%v\n", &Point{1, 2}) 的输出与fmt.Printf("%p\n", &Point{1, 2}) 的输出不匹配?
【问题讨论】:
-
您的示例代码显示您使用了
%v,并且您得到了相同的输出。有什么问题? -
@icza 更新了问题。我的程序的输出与
fmt文档相矛盾。我提供了文档的链接,并包含了相关的摘录以显示矛盾。
标签: pointers go struct format-specifiers