Memahami Polimorfisme dalam Go
Polymorphism, keupayaan objek untuk mengambil bentuk yang berbeza, dilaksanakan dalam antara muka Go through.
Masalah:
Pertimbangkan senario hipotetikal dengan struct BaseTX yang mewakili transaksi dan dua jenis transaksi khusus: RewardTX dan AllowanceTX. AllowanceTX memanjangkan BaseTX, menambah medan tambahan. Tugasnya adalah untuk melaksanakan fungsi yang beroperasi pada kedua-dua jenis transaksi, mensiri dan menyimpan data masing-masing menggunakan json.Marshal(). Walau bagaimanapun, pelaksanaan semasa hanya menyerikan medan daripada struct BaseTX, mengetepikan medan tambahan dalam AllowanceTX.
Begini Cara Modern Go Mendekati Ini:
Go tidak menyokong tradisional pewarisan objek, bergantung semata-mata pada antara muka untuk polimorfisme. Untuk menyelesaikan isu ini, pertimbangkan pelaksanaan alternatif berikut:
type TXapi interface { logicAndSaveTX() } type Metadata struct { Field1 string Field2 string } type RewardTX struct { Metadata } func (tx RewardTX) logicAndSaveTX() { // Logic to overwrite or modify `Metadata` fields ... fmt.Printf("saved this object: %+v \n", tx) } type AllowanceTX struct { Metadata AddField string } func (tx AllowanceTX) logicAndSaveTX() { // Logic to overwrite or modify `Metadata` fields ... // Additional logic for `AddField` ... fmt.Printf("saved this object: %+v \n", tx) }
Dalam pendekatan ini, Metadata menjadi struktur kendiri, membenarkan gelagat khusus pada medan Metadata terbenam dalam setiap jenis RewardTX atau AllowanceTX. Kaedah logicAndSaveTX() kini beroperasi secara khusus pada jenis masing-masing, mengendalikan kedua-dua medan biasa dan unik dengan sewajarnya.
Polymorphism in Go dicapai melalui antara muka, menyediakan cara yang fleksibel dan cekap untuk mengendalikan pelbagai jenis objek dengan gelagat yang serupa. Dengan menerima pendekatan ini, anda mengelakkan pengehadan warisan tradisional dan menggunakan sepenuhnya kekuatan reka bentuk berasaskan antara muka Go.
Atas ialah kandungan terperinci Bagaimanakah Boleh Melaksanakan Polimorfisme Tanpa Pewarisan Objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!