Rumah > pembangunan bahagian belakang > Golang > Mengapa Tidak Menyokong Lebihan Pemuatan Berdasarkan Jenis Hujah?

Mengapa Tidak Menyokong Lebihan Pemuatan Berdasarkan Jenis Hujah?

Linda Hamilton
Lepaskan: 2024-12-01 07:13:18
asal
796 orang telah melayarinya

Why Doesn't Go Support Function Overloading Based on Argument Types?

Pembebanan Kaedah dalam Go: Sekatan pada Jenis Argumen

Dalam Go, kaedah dengan nama dan arity yang sama (bilangan argumen) boleh beroperasi pada jenis yang berbeza. Walau bagaimanapun, jika anda cuba mengalihkan penerima kaedah sedemikian ke argumen, anda akan menghadapi ralat kompilasi.

Pertimbangkan kod berikut:

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 berjaya mencetak "A" dan "B" ke konsol. Walau bagaimanapun, jika anda mengubah suai tandatangan kaedah seperti berikut:

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

Anda akan menghadapi ralat kompilasi:

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

Go tidak menyokong lebihan muatan fungsi yang ditentukan pengguna berdasarkan jenis hujahnya. Ini berbeza dengan beberapa bahasa lain, seperti C , yang membenarkan lebihan muatan berdasarkan kedua-dua nama fungsi dan jenis argumen.

Dalam Go, fungsi dengan nama dan arity yang sama mesti mempunyai tandatangan yang sama. Jika anda ingin "membebankan" fungsi pada satu parameter, anda mesti menggunakan kaedah. Contohnya, anda boleh mencipta kaedah Cetak untuk setiap struct anda:

func (a A) Print() {
  fmt.Println(a.Name)
}

func (b B) Print() {
  fmt.Println(b.Name)
}
Salin selepas log masuk

Pendekatan ini membolehkan anda menggunakan nama kaedah yang sama sambil mengekalkan keselamatan jenis kod anda.

Atas ialah kandungan terperinci Mengapa Tidak Menyokong Lebihan Pemuatan Berdasarkan Jenis Hujah?. 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