【问题标题】:Optional arguments?可选参数?
【发布时间】:2012-01-30 18:14:55
【问题描述】:

有没有办法在 Go 编程语言中将参数声明为“可选”?

我的意思的例子:

func doSomething(foo string, bar int) bool {
    //...
}

我希望参数bar 是可选的,如果没有任何传递,则默认为0

doSomething("foo")

一样
doSomething("foo",0)

我无法在official documentation about functions 中找到有关此问题的任何信息。

【问题讨论】:

标签: function go optional-arguments


【解决方案1】:

我不相信 Go 确实支持函数的可选参数,尽管你可以用 variadic functions 伪造它。如果您不想这样做,C 方法是假装该语言支持柯里化:

func doSomethingNormally(foo string) bool {
    doSomething(foo, 0)
}

【讨论】:

  • 很遗憾,Go 中没有对可选参数的集成支持。我通过使用可变参数函数解决了我的问题。谢谢。
  • 主流语言如 C、Java、C++ 也不支持可选参数,AFAICS。
  • @jnml,C++ 可以用重载的函数原型来伪造它。许多主流语言,如 Python,确实支持函数参数的默认值。这实际上就是我们所说的,因为我认为所有这些(我不知道 Java),当然大多数主流语言都支持可变参数函数。
【解决方案2】:

另一种伪造它的方法是传递一个结构。

type dsArgs struct {
    foo string
    bar int
}

func doSomething(fb dsArgs) bool {
    //...
}

然后

doSomething(dsArgs{foo: "foo"})

相同
doSomething(dsArgs{foo: "foo", bar: 0})

【讨论】:

  • 我喜欢这种方法,但是当 bar 的默认值需要不是零并且 foo 的默认值是一些任意字符串时呢?当我找不到解决此类案例的简单方法时,我对 Go 有点恼火。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2010-12-07
  • 2012-12-20
  • 2010-11-01
  • 2012-04-07
相关资源
最近更新 更多