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!