2 回答

TA貢獻1798條經驗 獲得超7個贊
Go 中沒有函數重載,因此不能使用不同的參數聲明相同的函數。不過,有幾種方法可以實現這一點:
您可以添加具有不同名稱和簽名的多個函數
您可以更改函數以接受結構而不是參數
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貢獻1752條經驗 獲得超4個贊
Go 不支持方法覆蓋。您可以定義具有不同名稱且采用不同參數的方法,也可以聲明該方法接受參數結構。
type SetRateParams struct {
Meter models.Meter
Measure models.Measure
Total float64
}
type Repartition interface {
SetRateForMeasure(params SetRateParams) float64
}
(可選)您可以將結構中的參數聲明為指針,以便可以使用而不是使用零值來表示“未提供”的語義。對于可能是有效值的數字參數,這可能與此相關。nil0
使用結構參數的另一個優點是,如果您決定從現在起6個月后添加額外的參數,則不必更改所有調用站點(您只需將其添加到結構中)。
為了說明什么是可能的,varargs也有更糟糕的解決方案,但除非你討厭類型安全,否則我不建議這樣做。interface{}
- 2 回答
- 0 關注
- 77 瀏覽
添加回答
舉報