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