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 关注
- 86 浏览
添加回答
举报