在 Go 中重载不同类型的方法
在 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) } 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
这个错误的原因是Go不支持用户定义函数在其参数类型上的重载。这意味着我们不能有两个名称相同但参数类型不同的函数。
相反,我们可以使用不同的函数名称或使用方法仅“重载”一个参数(接收者)。
以上是Go 可以重载具有不同参数类型的方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!