作为一名来自 C++ 等其他语言的程序员,我觉得很奇怪,go 允许为允许指针或实例作为参数的结构指定方法。根据go by example,如果我们不想修改原点,once 可以使用它们中的任何一个:
Go 自动处理方法调用的值和指针之间的转换。您可能希望使用指针接收器类型来避免在方法调用上进行复制或允许该方法改变接收结构。
考虑以下代码:
package main
import (
"fmt"
)
type Foo struct {}
type Bar struct {}
func (this Foo) String() string {
return "Foo"
}
func (this *Bar) String() string {
return "Bar"
}
func main() {
fmt.Println(Foo{}) // "Foo"
fmt.Println(Bar{}) // "{}"
}
为什么我不能同时使用两个签名版本来修改结构的stringify(我不知道它在 go 中实际上是如何调用的)行为?
明确一点:我并不真正关心字符串化,但想了解语言的行为方式。
汪汪一只猫
幕布斯7119047
相关分类