Управляющие структуры в Go родственны к структурам в C, но отличаются важными деталями. Цикла do
или while
нет, есть только слегка обобщенный for
; switch
более гибкий; if
и switch
принимают необязательный оператор инициализации наподобие for
; операторы break
и continue
принимают дополнительную метку для определения break или continue; и есть новые управляющие структуры, включая type switch (переключатель типа) и мультиплексор многоканальной связи, select
. Синтаксис также немного отличается: нет круглых скобок и тела всегда должны быть разделены фигурными скобками.
Оператор if
В Go простой if
выглядит так:
if x > 0 {
return y
}
Обязательные фигурные скобки поощряют написание простых операторов if
на нескольких строках. В любом случае это хороший стиль, особенно когда тело содержит контролирующий оператор, такой как return
или break
.
Поскольку if
и switch
принимают выражение инициализации, часто встречается задание локальной переменной в этом выражении.
if err := file.Chmod(0664); err != nil {
log.Print(err)
return err
}
В Go библиотеках вы найдете случаи когда оператор if
не передает поток исполнения программы следующему оператору, то есть тело заканчивается на break
, continue
, goto
или return
- ненужный else
опущен.
f, err := os.Open(name)
if err != nil {
return err
}
codeUsing(f)
Это пример распространенной ситуации, когда код должен быть защищен от последовательности условий ошибки. Код хорошо читается, если успешный поток управления идет по странице вниз, устраняя ошибки в то время когда они возникают. Так как случаи ошибок обычно заканчиваются на return
операторах, результирующий код не нуждается в операторах else
.
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)
Читайте также:
Комментариев нет:
Отправить комментарий