Необязательные параметры в Go? - PullRequest
0 голосов
/ 23 декабря 2018

Я знаю, что в последней версии 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 и все еще чувствую, что может быть лучший способ.Есть ли?

1 Ответ

0 голосов
/ 23 декабря 2018

Но я новичок в Go и все еще чувствую, что может быть лучший путьЕсть ли?

Боюсь сказать нет. Другого пути нет.

...