Go中的可选参数?

时间:2018-12-23 08:16:13

标签: go optional-parameters optional-arguments

我知道最新版本的Go中没有任何可选的参数。但是在很多情况下,它们确实很有帮助。

考虑过度简化的示例:

func getFullName(firstName string, lastName string, maybeMiddleName func() (bool, string)) string {
    if ok, middleName:= maybeMiddleName(); ok {
        return firstName + " " + middleName + " " + lastName
    }

    return firstName + " " + lastName
}

这看起来已经足够好了,思考需要在客户端进行大量的冗长操作:每当middleName不存在或存在时,都必须在内部传递func() (bool, string) { return false, nil }。如果(false, nil)支持元组作为输入参数,可能只是Go,但事实并非如此:您可以返回(pairs, or, even, more),但不能将它们作为预期输入。

有人可能会争辩说nil可能被视为缺席的迹象。我不同意:不允许nil淹没任何可靠的代码库。

我看到的另一种选择更加麻烦:诸如func(maybeMiddleName struct{ ok bool; middleName string; }) ...之类的匿名结构,它迫使该方法的调用者每次都编写更多的冗余代码。

但是我是Go的新手,仍然觉得有更好的方法。有吗?

1 个答案:

答案 0 :(得分:1)

  

但是我对Go还是陌生的,但仍然觉得可能会有更好的方法。是   在那里?

我很乐意拒绝。没有其他方法。

相关问题