Rumah >pembangunan bahagian belakang >Golang >Bolehkah Kaedah Berlebihan dengan Jenis Hujah Berbeza?

Bolehkah Kaedah Berlebihan dengan Jenis Hujah Berbeza?

Susan Sarandon
Susan Sarandonasal
2024-12-02 00:29:13202semak imbas

Can Go Overload Methods with Different Argument Types?

Kaedah Lebih Muatan dengan Jenis Berbeza dalam Go

Dalam Go, adalah mungkin untuk mentakrifkan kaedah dengan nama yang sama tetapi jenis penerima yang berbeza. Contohnya, kod berikut berfungsi dengan baik:

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()
}

Kod ini mencetak output yang diingini:

A
B

Walau bagaimanapun, jika kita menukar tandatangan kaedah untuk mengalihkan penerima kepada hujah kaedahnya, kami mendapat ralat penyusunan:

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)
}

Ralat penyusunan ialah:

./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

Sebab ralat ini ialah Go tidak menyokong lebihan muatan fungsi yang ditentukan pengguna pada jenis hujah mereka. Ini bermakna kita tidak boleh mempunyai dua fungsi dengan nama yang sama tetapi jenis hujah yang berbeza.

Sebaliknya, kita boleh menggunakan nama fungsi yang berbeza atau menggunakan kaedah untuk "membebankan" hanya pada satu parameter (penerima).

Atas ialah kandungan terperinci Bolehkah Kaedah Berlebihan dengan Jenis Hujah Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn