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

Mengapa Tidak Menyokong Lebihan Pemuatan Berdasarkan Jenis Hujah?

Linda Hamilton
Linda Hamiltonasal
2024-12-01 07:13:18813semak imbas

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

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

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

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

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!

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