Go 中的可选参数?

Optional params in Go?

我知道 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 }。如果 Go 支持元组作为输入参数,它可能只是 (false, nil),但它不支持:您可以 return (pairs, or, even, more),但不将它们作为预期输入。

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

我看到的另一个选项更加冗长:像 func(maybeMiddleName struct{ ok bool; middleName string; }) ... 这样的匿名结构,它迫使此方法的调用者每次都编写更多冗余代码。

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

But I am new to Go and still feel like there might be a better way. Is there?

我不敢说 not.There 不是另一种方式。