Go 中可以實作匿名介面嗎?
考慮以下介面和一個虛構函式庫中的函數:
type NumOp interface { Binary(int, int) int Ternary(int, int, int) int } func RandomNumOp(op NumOp) { // ... }
要實現這個接口,可以定義一個類型例如:
type MyAdd struct {} func (MyAdd) Binary(a, b int) int {return a + b } func (MyAdd) Ternary(a, b, c int) int {return a + b + c }
需要功能實現
但是,假設我們需要使用匿名函數來實現一次性場景的介面。這將允許我們編寫:
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 { // ... } func (cop CustomOp) Ternary(a, b, c int) int { // ... }
非功能性實作
如果方法不需要可調用,你可以使用匿名結構體文字:
var op NumOp = struct{ NumOp }{}
以上是Go可以實作匿名介面嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!