具有相同名称和类型但类型不同的Golang方法
以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法:
type A struct { Name string
}
type B struct {
Name string
}
func (a *A) Print() {
fmt.Println(a.Name)
}
func (b *B) Print() {
fmt.Println(b.Name)
}
func main() {
a := &A{"A"}
b := &B{"B"}
a.Print()
b.Print()
}
在控制台中显示所需的输出:
AB
现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数:
func Print(a *A) { fmt.Println(a.Name)
}
func Print(b *B) {
fmt.Println(b.Name)
}
func main() {
a := &A{"A"}
b := &B{"B"}
Print(a)
Print(b)
}
我什至无法编译程序:
./test.go:22: Print redeclared in this block previous declaration at ./test.go:18
./test.go:40: cannot use a (type *A) as type *B in function argument
:为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型?
回答:
因为Go不支持在其参数类型上重载用户定义的函数。
您可以改用其他名称创建函数,或者如果只想在一个参数(接收方)上“重载”,则可以使用方法。
以上是 具有相同名称和类型但类型不同的Golang方法 的全部内容, 来源链接: utcz.com/qa/420341.html