Golang 中不同类型的方法重载
在 Go 中,可以为接收者定义名称相同但类型不同的方法,允许多态行为。但是,参数的情况并非如此。
当使用基于接收器的方法时,如下面的代码片段所示:
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) }
这会成功编译并在调用时提供所需的输出A 和 B 实例上的 Print 方法。但是,当尝试将方法的接收者移动到参数时,如下所示:
func Print(a *A) { fmt.Println(a.Name) } func Print(b *B) { fmt.Println(b.Name) }
这会导致编译错误:
./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
这是因为 Go 不支持基于参数类型的函数重载。这意味着不能使用不同的参数类型定义具有相同名称的函数。相反,它要求函数具有唯一的名称,或者如果您只想在一个参数(接收器)上“重载”,则需要使用方法。
因此,允许基于接收器重载方法,但不允许基于接收器重载方法。参数类型。
以上是Go 方法可以根据参数类型重载吗?的详细内容。更多信息请关注PHP中文网其他相关文章!