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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何編寫具有不同簽名的同一方法的多個實現(xiàn)

如何編寫具有不同簽名的同一方法的多個實現(xiàn)

Go
慕斯709654 2022-08-24 16:43:46
我有幾種相同方法的實現(xiàn):SetRateForMeasurepackage repartitiontype Repartition interface {    Name() string    Compute(meters []models.Meter, totalsProd, totalsConso map[string]float64) []models.Meter    SetRateForMeasure(meter models.Meter, measure models.Measure, total float64) float64}然后,在我的代碼中(在repartition.go中),我稱之為:rate := repartition.SetRateForMeasure(meter, measure, total)其中,重新分區(qū)是之前定義的接口。問題是,當(dāng)我添加此方法的新實現(xiàn)時,我的函數(shù)的參數(shù)可能會有所不同。例如,靜態(tài)重新分區(qū)使用僅在此情況下使用的靜態(tài)百分比。我最終添加了參數(shù),以便我為所有方法提供了一個通用接口,但是根據(jù)實現(xiàn)的不同,它會導(dǎo)致有很多未使用的參數(shù)。如果我將其添加到公共接口,它將不用于其他定義。我試圖從我的接口定義中刪除此方法,但現(xiàn)在rate := repartition.SetRateForMeasure()不再定義。我應(yīng)該如何組織我的代碼?
查看完整描述

2 回答

?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊

Go 中沒有函數(shù)重載,因此不能使用不同的參數(shù)聲明相同的函數(shù)。不過,有幾種方法可以實現(xiàn)這一點:

  • 您可以添加具有不同名稱和簽名的多個函數(shù)

  • 您可以更改函數(shù)以接受結(jié)構(gòu)而不是參數(shù)

SetRateForMeasure(args SetRateOptions) float64


type SetRateOptions struct {

 Meter models.Meter

 Measure models.Measure

 Total float64

 Percentage *float64 // If nil, use default percentage

 ... // more parameters as needed

}


查看完整回答
反對 回復(fù) 2022-08-24
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊

Go 不支持方法覆蓋。您可以定義具有不同名稱且采用不同參數(shù)的方法,也可以聲明該方法接受參數(shù)結(jié)構(gòu)。


type SetRateParams struct {

    Meter    models.Meter

    Measure  models.Measure

    Total    float64

}


type Repartition interface {

    SetRateForMeasure(params SetRateParams) float64

}

(可選)您可以將結(jié)構(gòu)中的參數(shù)聲明為指針,以便可以使用而不是使用零值來表示“未提供”的語義。對于可能是有效值的數(shù)字參數(shù),這可能與此相關(guān)。nil0


使用結(jié)構(gòu)參數(shù)的另一個優(yōu)點是,如果您決定從現(xiàn)在起6個月后添加額外的參數(shù),則不必更改所有調(diào)用站點(您只需將其添加到結(jié)構(gòu)中)。


為了說明什么是可能的,varargs也有更糟糕的解決方案,但除非你討厭類型安全,否則我不建議這樣做。interface{}


查看完整回答
反對 回復(fù) 2022-08-24
  • 2 回答
  • 0 關(guān)注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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