Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Go Mencapai Polimorfisme tanpa Warisan?

Bagaimanakah Go Mencapai Polimorfisme tanpa Warisan?

DDD
DDDasal
2024-11-06 06:45:02173semak imbas

How does Go Achieve Polymorphism without Inheritance?

Polimorfisme dalam Go lang

Seperti yang telah anda temui, Go tidak menyokong konsep polimorfisme berorientasikan objek tradisional melalui pewarisan. Walau bagaimanapun, terdapat cara lain untuk mencapai hasil yang serupa menggunakan antara muka dan komposisi.

Antara Muka dan Komposisi

Dalam Go, antara muka mentakrifkan kontrak yang menentukan kaedah yang mesti dilaksanakan oleh jenis . Komposisi membolehkan anda mencipta jenis baharu dengan membenamkan jenis lain. Dengan menggabungkan antara muka dan gubahan, anda boleh mencapai bentuk polimorfisme.

Sebagai contoh, pertimbangkan kod berikut:

<code class="go">package main

import "fmt"

type Foo interface {
    printFoo()
}

type FooImpl struct {
}

type Bar struct {
    FooImpl
}

type Bar2 struct {
    FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
    return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>

Dalam contoh ini:

  • Antara muka Foo mentakrifkan kaedah printFoo.
  • FooImpl melaksanakan antara muka Foo dengan kaedah printFoo.
  • Bar membenamkan FooImpl dan oleh itu melaksanakan antara muka Foo.
  • Bar2 membenamkan FooImpl dan juga melaksanakan antara muka Foo.
  • getFoo mengembalikan nilai jenis Foo. Memandangkan Bar dan Bar2 melaksanakan antara muka Foo, Bar2 ialah nilai pulangan yang sah untuk getFoo.
  • panggilan utama getFoo untuk mendapatkan nilai Foo dan kemudian memanggil kaedah printFoo pada nilai tersebut.

Apabila anda menjalankan kod ini, anda akan melihat output berikut:

Hello, playground
Print Foo Impl

Ini menunjukkan cara antara muka dan komposisi boleh digunakan untuk mencapai bentuk polimorfisme dalam Go. Dengan menentukan antara muka, anda boleh memastikan bahawa jenis yang berbeza berkongsi set kaedah yang sama. Dengan membenamkan jenis, anda boleh mencipta jenis baharu yang menggabungkan keupayaan berbilang jenis lain. Ini membolehkan anda menulis kod yang merawat jenis yang berbeza dengan cara yang seragam.

Atas ialah kandungan terperinci Bagaimanakah Go Mencapai Polimorfisme tanpa Warisan?. 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