Управляющие структуры в 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)
Читайте также:

Комментариев нет:
Отправить комментарий