如何干净地向函数添加参数

Phi*_*ppe -3 go

我有一个被多次调用的函数。我现在如何向该函数添加一个额外的参数,而不必修改所有调用站点(本质上是侵入那里的默认值并添加一堆噪音)以及保持类型安全?

我以前使用过的所有语言都支持默认参数或重载,所以我很不知道我将如何做到这一点。

ber*_*eal 10

Go 没有默认参数,也没有函数重载。我认为,在不更改其余代码的情况下,您可以做的最好的事情是:

  1. 将函数重命名Func()FuncWithNewArg()
  2. 添加一个新参数 FuncWithNewArg()
  3. 创建一个以Func()原始签名命名的新函数。Func()将调用FuncWithNewArg()传递其所有参数加上新参数的默认值。

  • @Philippe 这是一个很好的解决方案;一旦您在编辑器中看到实际代码,它看起来就不会那么糟糕 (6认同)
  • 另一种选择是使用单个 struct 参数,省略的字段将具有零值,但 1) 不满足不更改现有代码的约束,2) 可能表明该函数有太多参数. (3认同)
  • 但是如果一个函数中有太多的参数,这在任何语言中都是一个不好的信号。 (2认同)