Я знаю, что в последней версии 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
не могут переполнять любую надежную кодовую базу.
Другой вариант, который я вижу даже более многословным: anon работает как func(maybeMiddleName struct{ ok bool; middleName string; }) ...
, что заставляет вызывающего этого метода писать еще более избыточныйкод каждый раз.
Но я новичок в Go
и все еще чувствую, что может быть лучший способ.Есть ли?