在 Go 中處理介面
Go 介面提供了強大的抽象機制。然而,在處理多個介面和具體類型時,它們的使用可能會帶來一定的挑戰。
理解 Go 介面
與 C 和 Java 等語言不同,Go 不支援直接類別繼承。相反,介面充當多態性的一種形式,允許不相關的類型實現同一組方法。它們沒有定義任何底層實作細節。
多個介面和實作
在您的範例中,您在嘗試存取字串表示形式時遇到問題(“String( )") 的“ Card”介面實例的方法。這是因為介面本身沒有定義該方法。
介面設計的最佳實踐
要解決此問題並最佳化您的介面設計,請考慮以下事項:
- 避免隱藏實作:雖然您原本可能想隱藏結構類型為了強制封裝,Go的未匯出(“小寫”)結構欄位已經阻止了對內部資料的直接操作。
- 回傳具體類型: 在大多數情況下,最好傳回具體類型而不是介面。這簡化了客戶端程式碼並保持清晰度。
-
聲明不成熟的接口(如果需要):僅在實現之前聲明接口,如果:
- 多個實現接口存在,客戶端在它們之間動態交換。
- 客戶端靜態地使用介面類型化函數或型別。
- 減輕文件影響: 宣稱過早的介面可能會影響文件的清晰度。使用文件註解來解釋任何介面方法的目的和約束。
替代方法
而不是使用介面定義「卡片」API和字串轉換,考慮使用嵌入:
type Card struct { cardNum int face string suit string } // Interface for the Card's game-related behavior type GameCard interface { GetFace() string GetSuit() string } // Embedded interface for string conversion type Stringer interface { String() string } // Implement both interfaces on the Card type func (c *Card) GetFace() string { return c.face } func (c *Card) GetSuit() string { return c.suit } func (c *Card) String() string { return fmt.Sprintf("%s%s ", c.GetFace(), c.GetSuit()) } // Usage: func main() { // Create a Card instance and access its methods card := Card{cardNum: 0} fmt.Println(card.GetFace()) fmt.Println(card.GetSuit()) fmt.Println(card.String()) }
這種方法允許您為不同的關注點定義單獨的介面(遊戲邏輯和字串轉換)並在同一結構上實現它們。
以上是如何在 Go 中有效處理多個介面和具體類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文解釋了GO的軟件包導入機制:命名imports(例如導入“ fmt”)和空白導入(例如導入_ fmt; fmt;)。 命名導入使包裝內容可訪問,而空白導入僅執行t

本文解釋了Beego的NewFlash()函數,用於Web應用程序中的頁間數據傳輸。 它專注於使用newflash()在控制器之間顯示臨時消息(成功,錯誤,警告),並利用會話機制。 Lima

本文詳細介紹了MySQL查詢結果的有效轉換為GO結構切片。 它強調使用數據庫/SQL的掃描方法來最佳性能,避免手動解析。 使用DB標籤和Robus的結構現場映射的最佳實踐

本文演示了創建模擬和存根進行單元測試。 它強調使用接口,提供模擬實現的示例,並討論最佳實踐,例如保持模擬集中並使用斷言庫。 文章

本文探討了GO的仿製藥自定義類型約束。 它詳細介紹了界面如何定義通用功能的最低類型要求,從而改善了類型的安全性和代碼可重複使用性。 本文還討論了局限性和最佳實踐

本文詳細介紹了在GO中詳細介紹有效的文件,將OS.WriteFile(適用於小文件)與OS.openfile和緩衝寫入(最佳大型文件)進行比較。 它強調了使用延遲並檢查特定錯誤的可靠錯誤處理。

本文使用跟踪工具探討了GO應用程序執行流。 它討論了手冊和自動儀器技術,比較諸如Jaeger,Zipkin和Opentelemetry之類的工具,並突出顯示有效的數據可視化


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能