首頁 >後端開發 >Golang >如何在沒有基本類型的情況下實現 Go 中的多態性?

如何在沒有基本類型的情況下實現 Go 中的多態性?

Susan Sarandon
Susan Sarandon原創
2024-11-17 00:31:03936瀏覽

How to Implement Polymorphism in Go without Base Types?

理解Go 中的多態性

在嘗試解決涉及多種事務類型和共享基類型的程式設計問題時,您可能在實現多態性時遇到了挑戰。讓我們深入研究多態性的概念並解決您的特定問題。

在 Go 中,與物件導向語言不同,多態性僅限於介面。介面定義了一組可以由不同類型實現的方法。

在您的範例中,您嘗試建立一個「基本」類型 BaseTX 和兩個子類型 RewardTX 和AllowanceTX。與基本類型相比,這些子類型具有額外的欄位。

問題的出現​​是因為您定義了一個在 TXapi 介面上執行的函數,logicAndSaveTX。然而,該函數的實作在 BaseTX 類型上進行操作,導致從子類型中排除了附加欄位。

解決方案在於刪除「基本」類型的概念。相反,將元資料視為事務之間共享的公共欄位。您可以將元資料宣告為單獨的類型並將其嵌入到 RewardTX 和AllowanceTX 類型中。然後,每種類型都可以有自己的logicAndSaveTX方法來修改特定欄位。

這是一個更新的範例:

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
}

透過擁抱組合併為方法定義明確的範圍,您可以透過以下方式有效地實現多態性: Go 中的介面。

以上是如何在沒有基本類型的情況下實現 Go 中的多態性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn