Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mencapai Polimorfisme dalam Go Without Inheritance: Contoh Praktikal

Cara Mencapai Polimorfisme dalam Go Without Inheritance: Contoh Praktikal

DDD
DDDasal
2024-11-18 20:44:02502semak imbas

How to Achieve Polymorphism in Go Without Inheritance: A Practical Example

Memahami Polimorfisme dalam Go: Membongkar Salah Tanggapan Biasa

Walaupun polimorfisme ialah konsep asas dalam pengaturcaraan berorientasikan objek, ia mengambil bentuk yang berbeza dalam Pergi. Mari kita jelaskan perkara ini dengan menangani isu khusus yang berkaitan dengan pelaksanaan polimorfisme dalam kod anda.

Dalam Go, polimorfisme dicapai melalui antara muka, yang mentakrifkan satu set kaedah yang mesti dilaksanakan oleh sesuatu jenis. Daripada menggunakan warisan seperti dalam bahasa berorientasikan objek, Go menggunakan gubahan untuk mencipta jenis dengan gelagat dikongsi.

Dalam kod anda, anda cuba mencipta jenis "asas" BaseTX yang mengandungi medan biasa untuk jenis yang berbeza daripada urus niaga. Walau bagaimanapun, komposisi harus digunakan dan bukannya warisan, jadi kami akan mencipta struct Metadata yang menyimpan medan kongsi:

type Metadata struct {
    Field1 string
    Field2 string
}

Jenis transaksi kami kemudiannya akan membenamkan Metadata:

type RewardTX struct {
    Metadata 
}

type AllowanceTX struct {
    Metadata 
    AddField string
}

Untuk melaksanakan operasi biasa pada jenis transaksi ini, kami akan mentakrifkan kaedah logicAndSaveTX untuk Metadata yang mengendalikan logik yang dikongsi:

func (tx Metadata) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
}

Dan kemudian tentukan kaedah logicAndSaveTX tersuai untuk RewardTX dan AllowanceTX yang memanjangkan tingkah laku biasa:

func (tx RewardTX) logicAndSaveTX() {
    // Call Metadata's logicAndSaveTX()
    tx.Metadata.logicAndSaveTX()

    // Additional logic unique to RewardTX
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Call Metadata's logicAndSaveTX()
    tx.Metadata.logicAndSaveTX()

    // Additional logic unique to AllowanceTX
    tx.AddField = "more stuff"
}

Dengan mengarang Metadata ke dalam jenis transaksi dan melaksanakan kaedah khusus untuk setiap jenis, kami mencapai gelagat yang diingini tanpa bergantung pada warisan atau kelas asas. Ini ialah "jalan Pergi yang betul" untuk mengendalikan polimorfisme melalui antara muka dan komposisi.

Atas ialah kandungan terperinci Cara Mencapai Polimorfisme dalam Go Without Inheritance: Contoh Praktikal. 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