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!