英文:
Go: pointer behaviour for a struct type
问题
这段代码:
y := 7
fmt.Println(y)
fmt.Println(&y)
fmt.Println(*&y)
它输出了7,一些内存地址和7,符合预期。
但是这段代码:
x := time.Now()
fmt.Println(x)
fmt.Println(&x)
fmt.Println(*&x)
它总是输出当前时间。
难道第二个Println不应该输出一些内存地址吗?
英文:
This code:
y := 7
fmt.Println(y)
fmt.Println(&y)
fmt.Println(*&y)
It prints 7, some memory address and 7, as expected.
But this:
x := time.Now()
fmt.Println(x)
fmt.Println(&x)
fmt.Println(*&x)
It always prints current time.
Shouldn't second Println print some memory address?
答案1
得分: 2
实现了fmt.Stringer
接口的类型,在指针或值上调用string()
函数。而没有实现该接口的类型,则会打印内存地址。
time.Time
实现了fmt.Stringer
接口,而int类型没有。
英文:
A type that implements fmt.Stringer
gets func string()
called on pointer or value. A type that does not gets the memory address printed.
time.Time
implements fmt.Stringer
, while int does not.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论