第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

是否可以在 Go 中定義匿名接口實(shí)現(xiàn)?

是否可以在 Go 中定義匿名接口實(shí)現(xiàn)?

Go
萬千封印 2023-06-01 14:22:49
考慮一些給定的接口和一個(gè)使用它的虛構(gòu)庫的函數(shù)// Binary and Ternary operation on intstype NumOp interface {    Binary(int, int) int    Ternary(int, int, int) int}func RandomNumOp(op NumOp) {    var (        a = rand.Intn(100) - 50        b = rand.Intn(100) - 50        c = rand.Intn(100) - 50    )    fmt.Printf("%d <op> %d = %d\n", a, b, op.Binary(a,b))    fmt.Printf("%d <op> %d <op> %d = %d\n", a, b, c, op.Ternary(a,b,c))}實(shí)現(xiàn)該接口的可能類型可能是// MyAdd defines additions on 2 or 3 int variablestype MyAdd struct {}func (MyAdd) Binary(a, b int) int {return a + b }func (MyAdd) Ternary(a, b, c int) int {return a + b + c }我正在處理許多不同的接口,這些接口定義了一些函數(shù),在某些情況下需要使用主要作為類似操作的函數(shù)來實(shí)現(xiàn),NOP不依賴于任何結(jié)構(gòu)成員并且僅在項(xiàng)目中的單個(gè)位置使用(不需要可重用性) ).Go 中是否有一種更簡(jiǎn)單(更簡(jiǎn)潔)的方式來定義(最好)使用匿名函數(shù)的接口的匿名實(shí)現(xiàn),就像(偽代碼,我知道它不是那樣工作的):RandomNumOp({   Binary: func(a,b int) int { return a+b},   Ternary: func(a,b,c int) int {return a+b+c},})
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果實(shí)施必須奏效

如果實(shí)現(xiàn)接口的值必須有效(例如,它的方法必須可以調(diào)用而不會(huì)出現(xiàn)恐慌),那么你就不能這樣做。


方法聲明必須在頂層(文件級(jí))。要實(shí)現(xiàn)一個(gè)具有 0 個(gè)以上方法的接口,需要在某處聲明方法。


當(dāng)然,您可以使用一個(gè)結(jié)構(gòu)并嵌入一個(gè)現(xiàn)有的實(shí)現(xiàn),但話又說回來,它需要已經(jīng)有一個(gè)現(xiàn)有的實(shí)現(xiàn),其方法必須已經(jīng)在“某處”定義:在文件級(jí)別。


如果您需要一個(gè)“虛擬”但可行的實(shí)現(xiàn),他們會(huì)使用/傳遞任何MyAdd實(shí)現(xiàn),例如您的類型的值。如果您想強(qiáng)調(diào)實(shí)現(xiàn)無關(guān)緊要,則創(chuàng)建一個(gè)虛擬實(shí)現(xiàn),其名稱表明:


type DummyOp struct{}


func (DummyOp) Binary(_, _ int) int     { return 0 }

func (DummyOp) Ternary(_, _, _ int) int { return 0 }

如果您需要?jiǎng)討B(tài)地提供一些方法的實(shí)現(xiàn),您可以創(chuàng)建一個(gè)委托結(jié)構(gòu)類型來保存這些方法的函數(shù),實(shí)際的方法檢查是否設(shè)置了相應(yīng)的函數(shù),在這種情況下調(diào)用它,否則什么都不會(huì)完畢。


這就是它的樣子:


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

}

使用它時(shí),您可以自由地只提供函數(shù)的一個(gè)子集,其余的將是空操作:


RandomNumOp(CustomOp{

    binary: func(a, b int) int { return a + b },

})

如果不需要實(shí)施工作

如果你只需要一個(gè)實(shí)現(xiàn)接口的值,但你不需要它的方法是“可調(diào)用的”(調(diào)用時(shí)不要恐慌),你可以簡(jiǎn)單地使用匿名結(jié)構(gòu)文字,嵌入接口類型:


var op NumOp = struct{ NumOp }{}


查看完整回答
反對(duì) 回復(fù) 2023-06-01
  • 1 回答
  • 0 關(guān)注
  • 158 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)