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 不是另一种方式。
我知道 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 不是另一种方式。