問題和目標
現在有了泛型作為Go 1.18 的一部分,許多開發人員將目光投向創建準確表示複雜概念的類型。一個經典案例是「Either[A, B]」類型,它表示一個值可能是兩種不同類型 A 或 B 之一。
介面定義障礙
在為「任一」型別定義介面時,由於語言限制不允許在介面方法中使用型別參數,因此出現了障礙。此限制阻止我們表達“Switch”方法,該方法根據值的變體傳回不同的類型。
一種創造性的實現
要克服這個問題,可以從函數式程式語言中汲取靈感,並實現一種「可選」類型,該類型封裝了表示特定值或不存在的能力。在此基礎上,我們可以定義「Either」類型:
type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] }
這種方法不依賴「Switch」方法,而是利用「is_left」和「is_right」方法來決定型別包含的價值。然後,“find_left”和“find_right”方法為對應類型提供“可選”值。
實現細節和用法
在“Left”和“正確的具體類型實現“任一”,我們管理實際的有效負載並提供必要的布爾標誌。 「left」和「right」函數充當建構函數,簡化實例化。 🎜>
雖然Go的通用限制帶來了挑戰,但可以解決它們並創建強大的像“任一”類型這樣的抽象。尋求的靈活性和表現力。以上是考慮到介面方法中泛型的限制,我們如何在 Go 中實作任一類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!