Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ketahui lebih lanjut tentang definisi dan penggunaan kaedah Golang dengan nama yang sama

Ketahui lebih lanjut tentang definisi dan penggunaan kaedah Golang dengan nama yang sama

PHPz
PHPzasal
2023-03-29 15:16:511307semak imbas

Golang ialah bahasa yang ditaip kuat, disusun secara statik yang dibangunkan oleh Google. Sintaks dan kecekapannya yang ringkas menjadikannya bahasa pilihan bagi banyak syarikat Internet. Kaedah dengan nama yang sama adalah ciri tatabahasa yang menarik dalam bahasa ini. Artikel ini akan memperkenalkan definisi, senario penggunaan dan langkah berjaga-jaga bagi kaedah Golang dengan nama yang sama.

  1. Takrif kaedah dengan nama yang sama

Di Golang, kaedah dengan nama yang sama merujuk kepada berbilang kaedah dengan nama kaedah yang sama. Kaedah ini boleh muncul dalam jenis yang sama atau dalam jenis yang berbeza.

Kaedah dengan nama yang sama mesti memenuhi syarat berikut:

(1) Mereka mesti ditakrifkan pada jenis penerima yang berbeza
(2) Mereka mesti mempunyai senarai parameter yang berbeza; > (3) Nilai pulangan mereka boleh berbeza, tetapi nama kaedah mestilah sama.

Sebagai contoh, berikut ialah struktur yang mentakrifkan dua kaedah dengan nama yang sama:

type Person struct{
    Name string
    Age int
}

func (p Person) Print(){
    fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
}

func (p *Person) Print(){
    fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
}
Dalam contoh di atas, struktur Orang mentakrifkan dua kaedah dengan nama yang sama, Cetak. Kaedah Cetak pertama menerima nilai jenis Orang sebagai penerima, manakala kaedah Cetak kedua menerima penunjuk untuk menaip Orang sebagai penerima.

    Penggunaan kaedah dengan nama yang sama
Senario penggunaan kaedah dengan nama yang sama adalah serupa dengan kaedah biasa Anda boleh menggunakan notasi titik untuk memanggil kaedah pada objek , atau anda boleh memanggil kaedah melalui nama taip .

Berikut ialah contoh menggunakan kaedah dengan nama yang sama:

p := Person{
    Name: "Tom",
    Age: 18,
}

p.Print() // Name: Tom, Age: 18

pp := &p
pp.Print() // Name: Tom, Age: 18
Dalam contoh di atas, kami menggunakan objek yang sama untuk memanggil dua kaedah. Memandangkan kaedah Cetak pertama menerima nilai jenis Orang sebagai penerima, kita boleh menggunakan p.Print() untuk memanggilnya. Kaedah Cetak kedua menerima nilai jenis penunjuk sebagai penerima, jadi kita perlu memanggilnya menggunakan penunjuk ke p.

    Nota
Walaupun kaedah dengan nama yang sama disokong di Golang, anda perlu memberi perhatian kepada perkara berikut semasa penggunaan:

( 1 ) Kaedah dengan nama yang sama mesti ditakrifkan pada jenis penerima yang berbeza

(2) Senarai parameter kaedah dengan nama yang sama tidak boleh sama
(3) Nilai pulangan kaedah dengan nama yang sama boleh berbeza;
(4) Jika jenis Jika dua kaedah dengan nama yang sama ditakrifkan, apabila memanggil kaedah pada jenis ini, pengkompil akan memilih kaedah yang sesuai berdasarkan jenis penerima.

Untuk struktur Orang dalam contoh di atas, jika kita mentakrifkannya seperti berikut:

type Person struct{
    Name string
    Age int
}

func (p *Person) Print(){
    fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
}

func (p *Person) Print(){
    fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
}
Pengkompil akan melaporkan ralat berikut:

redeclared method Person.Print
Kerana kami tentukan Dua kaedah dengan nama yang sama dengan senarai parameter yang sama.

Ringkasan

Dalam artikel ini, kami memperkenalkan kaedah dengan nama yang sama di Golang. Kaedah dengan nama yang sama ialah ciri sintaks yang menarik yang membolehkan kami mentakrifkan nama kaedah yang sama pada jenis penerima yang berbeza. Terdapat beberapa batasan yang perlu diberi perhatian apabila menggunakan kaedah dengan nama yang sama, tetapi menggunakannya dengan bijak boleh meningkatkan kebolehbacaan dan kebolehselenggaraan kod anda.

Atas ialah kandungan terperinci Ketahui lebih lanjut tentang definisi dan penggunaan kaedah Golang dengan nama yang sama. 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