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中文網其他相關文章!