具有相同名称和类型但类型不同的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()

}

在控制台中显示所需的输出:

A

B

现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数:

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

回到顶部