Go 允許使用介面定義自訂類型。然而,這就提出了一個問題:對於需要將特定功能實作為簡單操作的情況,是否可以建立介面的匿名實作。
偽代碼提供的建議創建一個類似於以下內容的匿名實作:
RandomNumOp({ Binary: func(a, b int) int { return a + b }, Ternary: func(a, b, c int) int { return a + b + c }, })
但是,這種方法不是在Go 中直接可行,因為方法宣告必須在檔案層級定義。因此,要實現具有多個方法的接口,顯式方法聲明是必要的。
要獲得可行的實現,您可以利用現有的結構體或創建一個「虛擬」實現來強調缺乏後果。以下是一個範例:
type DummyOp struct{} func (DummyOp) Binary(_, _ int) int { return 0 } func (DummyOp) Ternary(_, _, _ int) int { return 0 }
或者,考慮一個委託者結構類型,它允許您動態地為方法提供函數:
type CustomOp struct { binary func(int, int) int ternary func(int, int, int) int } func (cop CustomOp) Binary(a, b int) int { if cop.binary != nil { return cop.binary(a, b) } return 0 } func (cop CustomOp) Ternary(a, b, c int) int { if cop.ternary != nil { return cop.ternary(a, b, c) } return 0 }
範例用法:
RandomNumOp(CustomOp{ binary: func(a, b int) int { return a + b }, })
如果您的實作不需要功能性方法,您可以使用匿名結構體文字:
var op NumOp = struct{ NumOp }{}
以上是Go可以實作匿名介面嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!