可选参数?

4
有没有一种方法可以在Go编程语言中将参数声明为“可选”的?
这是我所指的示例:
func doSomething(foo string, bar int) bool {
    //...
}

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

doSomething("foo")

将会和

相同。
doSomething("foo",0)

我在官方函数文档中未找到与此相关的内容。


这不被支持是一项设计决策,参见https://dev59.com/bnI-5IYBdhLWcg3wED9V。 - FigmentEngine
2个回答

2

我不相信Go支持函数的可选参数,但是你可以使用变参函数来模拟。如果你不想这样做,可以采用C的方法,假装该语言支持柯里化:

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

很遗憾,Go语言没有对可选参数提供集成支持。我通过使用可变参数函数解决了我的问题。谢谢。 - thwd
主流语言如 C、Java 和 C++ 都不支持可选参数,就我所知。 - zzzz
@jnml,C++可以通过重载函数原型来模拟默认参数。许多主流语言,如Python,支持函数参数的默认值。实际上,这就是我们正在谈论的,因为我认为所有这些(我不知道Java)和绝大多数主流语言都支持可变参数函数。 - nmichaels

0

另一种假装的方法是传递一个结构体。

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有点恼火。 - jsdw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接