首頁 >後端開發 >Golang >Go 可以重載具有不同參數類型的方法嗎?

Go 可以重載具有不同參數類型的方法嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-02 00:29:13162瀏覽

Can Go Overload Methods with Different Argument Types?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn