Bagaimana untuk Melaksanakan Polimorfisme dalam Go without Base Types?

Susan Sarandon
Lepaskan: 2024-11-17 00:31:03
asal
867 orang telah melayarinya

How to Implement Polymorphism in Go without Base Types?

Memahami Polimorfisme dalam Go

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan