Bagaimanakah saya boleh menggunakan antara muka dan jenis terbenam untuk mencipta kaedah generik dalam Go?

Barbara Streisand
Lepaskan: 2024-10-27 01:20:02
asal
368 orang telah melayarinya

How can I use interfaces and embedded types to create generic methods in Go?

Parameter Kaedah Generik di Golang

Dalam Go, adalah mungkin untuk mentakrifkan kaedah generik yang berfungsi dengan jenis yang berbeza, memberikan lebih fleksibiliti dan kebolehgunaan semula kod . Untuk menangani isu dalam kod yang disediakan, kami akan meneroka penggunaan antara muka dan jenis terbenam.

Menggunakan Antara Muka

Antaramuka mentakrifkan satu set kaedah yang jenis mesti dilaksanakan untuk memenuhi antara muka. Dengan menggunakan antara muka dalam parameter kaedah, kita boleh memisahkan kaedah daripada jenis tertentu, membenarkan ia digunakan dengan mana-mana jenis yang melaksanakan antara muka.

Pertimbangkan kod berikut:

<code class="go">type Mammal interface {
    GetID() int
    GetName() string
}</code>
Salin selepas log masuk

Di sini , Mamalia mentakrifkan antara muka dengan dua kaedah: GetID dan GetName.

Antara Muka Benam

Antara muka terbenam membolehkan kami mencipta jenis yang mewarisi kaedah satu atau lebih antara muka. Sebagai contoh, jenis Manusia boleh membenamkan antara muka Mamalia:

<code class="go">type Human struct {
    MammalImpl
    HairColor string
}</code>
Salin selepas log masuk

Pelaksanaan

Seterusnya, kita perlu melaksanakan kaedah GetID dan GetName untuk kedua-dua MammalImpl dan HumanImpl . Memandangkan HumanImpl membenamkan MammalImpl, ia mewarisi pelaksanaan untuk GetID dan GetName:

<code class="go">type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}</code>
Salin selepas log masuk

Mengubah suai Fungsi Kiraan

Kini, kami boleh mengubah suai fungsi Count untuk menerima keping mana-mana jenis yang memenuhi antara muka Mamalia:

<code class="go">func Count(ms []Mammal) *[]string {
   IDs := make([]string, len(ms))
   for i, m := range ms {
     IDs[i] = strconv.Itoa(m.GetID())  // Access ID via the method: GetID()
   }
   return &IDs
}</code>
Salin selepas log masuk

Mencipta Kepingan Mamalia dan Manusia

Akhir sekali, kita boleh mencipta kepingan pelbagai jenis yang melaksanakan Mamalia:

<code class="go">mammals := []Mammal{
    MammalImpl{1, "Carnivorious"},
    MammalImpl{2, "Ominivorious"},
}

humans := []Mammal{
    HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"},
    HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"},
}</code>
Salin selepas log masuk

Kesimpulan

Dengan menggunakan antara muka dan jenis terbenam, kami boleh mencipta kaedah generik yang berfungsi dengan jenis data yang berbeza, memberikan lebih fleksibiliti dan kebolehgunaan semula kod dalam program Go .

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan antara muka dan jenis terbenam untuk mencipta kaedah generik dalam Go?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!