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
}

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{}
- 2 回答
- 0 關(guān)注
- 83 瀏覽
添加回答
舉報