首頁  >  文章  >  後端開發  >  Go可以實作匿名介面嗎?

Go可以實作匿名介面嗎?

DDD
DDD原創
2024-11-27 03:44:16862瀏覽

Can Go Implement Anonymous Interfaces?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn