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

Bolehkah Kaedah Berlebihan dengan Jenis Hujah Berbeza?

Susan Sarandon
Lepaskan: 2024-12-02 00:29:13
asal
139 orang telah melayarinya

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()
}
Salin selepas log masuk

Kod ini mencetak output yang diingini:

A
B
Salin selepas log masuk

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)
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan