Semasa cuba menyelesaikan masalah pengaturcaraan yang melibatkan pelbagai jenis transaksi dan jenis asas dikongsi, anda mungkin menghadapi cabaran dalam melaksanakan polimorfisme. Mari kita mendalami konsep polimorfisme dan menangani isu khusus anda.
Dalam Go, tidak seperti bahasa berorientasikan objek, polimorfisme terhad kepada antara muka. Antara muka mentakrifkan satu set kaedah yang boleh dilaksanakan oleh jenis yang berbeza.
Dalam kes anda, anda cuba mencipta jenis "asas", BaseTX dan dua jenis anak, RewardTX dan AllowanceTX. Jenis kanak-kanak ini mempunyai medan tambahan berbanding pangkalan.
Masalah timbul kerana anda menentukan fungsi, logicAndSaveTX, yang beroperasi pada antara muka TXapi. Walau bagaimanapun, pelaksanaan fungsi ini beroperasi pada jenis BaseTX, yang membawa kepada pengecualian medan tambahan daripada jenis anak.
Penyelesaian terletak pada mengalih keluar konsep jenis "asas". Sebaliknya, anggap Metadata sebagai medan biasa yang dikongsi antara urus niaga. Anda boleh mengisytiharkan Metadata sebagai jenis yang berasingan dan membenamkannya ke dalam jenis RewardTX dan AllowanceTX. Setiap jenis kemudiannya boleh mempunyai kaedah logicAndSaveTX sendiri yang mengubah suai medan tertentu.
Berikut ialah contoh yang dikemas kini:
type TXapi interface { logicAndSaveTX() } type Metadata struct { Field1 string Field2 string } type RewardTX struct { Metadata } func (tx RewardTX) logicAndSaveTX() { // Modify TX-specific fields tx.Field1 = "Reward Field 1" tx.Field2 = "Reward Field 2" // Logic and save metadata shared with AllowanceTX } type AllowanceTX struct { Metadata AddField string } func (tx AllowanceTX) logicAndSaveTX() { // Modify TX-specific fields tx.Field1 = "Allowance Field 1" tx.Field2 = "Allowance Field 2" tx.AddField = "Allowance Additional Field" // Logic and save metadata shared with RewardTX }
Dengan menerima komposisi dan mentakrifkan skop yang jelas untuk kaedah, anda boleh melaksanakan polimorfisme dengan berkesan melalui antara muka dalam Go.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Polimorfisme dalam Go without Base Types?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!