если условие с несколькими переменными в Голанге - PullRequest
0 голосов
/ 08 ноября 2018

Поскольку я пришел из Python, следующий код очень смущает меня. может кто-нибудь объяснить это?

if nferr, ok := err.(ops.NonFatalError); ok {
    w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
    return nil
}
  • как будут оцениваться переменные nferr, ok?
  • что такое переменная ok перед открытием фигурной скобки?

  • оператор return nil, возвращается ли он из функции, код в?

1 Ответ

0 голосов
/ 08 ноября 2018

Это называется идиома "запятая нормально" в Go, которая, по сути, совпадает с:

nferr, ok := err.(ops.NonFatalError)
if ok {
    w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
    return nil
}

Единственная разница - это область действия nferr и ok, которая находится в пределах if block.

как будут оцениваться переменные nferr, ok?

Если err имеет тип ops.NonFatalError, nferr будет конкретным типомops.NonFatalError, иначе, ok будет ложным, а nferr будет нулевым значением ops.NonFatalError.

Какая переменная в порядке перед открытием фигурной скобки?

Посмотрите на приведенный выше код, он по сути тот же.

оператор return nil, возвращается ли он из функции, код в?

Да.

Редактировать

Из комментария @ ThunderCat, который я настоятельно рекомендую вам пройти, обзор Go объясняет много синтаксиса:

Введите утверждения

Если с кратким заявлением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...