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

Go可以實作匿名介面嗎?

DDD
發布: 2024-11-26 18:35:13
原創
197 人瀏覽過

Can Anonymous Interface Implementations Be Achieved in Go?

Go 中的匿名介面實作

簡介

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板