Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Polimorfisme dalam Go Using Composition?

Bagaimana untuk Mencapai Polimorfisme dalam Go Using Composition?

Susan Sarandon
Susan Sarandonasal
2024-11-21 10:42:14559semak imbas

How to Achieve Polymorphism in Go Using Composition?

Memahami Polimorfisme dalam Go: Pendekatan Berasaskan Komposisi

Dalam Go, tidak seperti bahasa berorientasikan objek, polimorfisme dicapai melalui antara muka. Apabila cuba melaksanakan polimorfisme, adalah penting untuk mengelakkan konsep kelas/jenis "asas" untuk gubahan.

Pertimbangkan masalah berikut:

Anda mempunyai struktur BaseTX dengan medan untuk transaksi dan dua jenis istimewa: RewardTX dan AllowanceTX. Yang terakhir memerlukan AddField tambahan. Selain itu, terdapat fungsi logicAndSaveTX untuk melaksanakan logik tertentu sebelum mensiri dan menyimpan objek.

Walau bagaimanapun, dalam pelaksanaan semasa anda, sifat AddField tidak dikenali.

Daripada bergantung pada warisan, pendekatan yang lebih Go-idiomatik ialah menggunakan gubahan. Struktur Metadata boleh mengandungi medan kongsi yang digunakan oleh kedua-dua RewardTX dan AllowanceTX. Setiap struct kemudiannya boleh melaksanakan kaedah logicAndSaveTXnya sendiri:

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

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

Dengan merangkum gelagat (kaedah) dalam setiap jenis, anda boleh mengelakkan perangkap cuba menggunakan operasi dari satu jenis ke jenis yang lain. Sebaliknya, anda boleh mereka bentuk kod yang jelas dan boleh diselenggara yang beroperasi pada jenis tertentu yang perlu anda urus.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Polimorfisme dalam Go Using Composition?. 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