在嘗試解決涉及多種事務類型和共享基類型的程式設計問題時,您可能在實現多態性時遇到了挑戰。讓我們深入研究多態性的概念並解決您的特定問題。
在 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中文網其他相關文章!