День 06 — глубже
Всё здесь необязательно. Материалы на английском помечены.
Тур по Go: управление ходом программы (англ.)
- If — https://go.dev/tour/flowcontrol/5
- If and else — https://go.dev/tour/flowcontrol/7
- Switch — https://go.dev/tour/flowcontrol/9
- Switch with no condition — https://go.dev/tour/flowcontrol/11
Короткие страницы с кодом, который запускается в браузере. Страница If with a short statement (flowcontrol/6) показывает запись if x := …; x > 0 {: переменная объявляется прямо в строке if и видна только внутри его блоков. В чужом Go-коде такая запись встречается часто, особенно при обработке ошибок.
Спецификация языка (англ.)
- Comparison operators — https://go.dev/ref/spec#Comparison_operators Что с чем можно сравнивать и почему
intнельзя сравнить сfloat64. - Logical operators — https://go.dev/ref/spec#Logical_operators
Одна фраза о том, что правая часть && и || вычисляется «условно», — это и есть короткое вычисление.
- Operator precedence — https://go.dev/ref/spec#Operator_precedence
Таблица старшинства: пять уровней, у && второй, у || первый, самый младший.
- Switch statements — https://go.dev/ref/spec#Switch_statements Точные правила
switch,defaultиfallthrough.
Как пишут условия в Go (англ.)
- Effective Go, раздел If — https://go.dev/doc/effective_go#if Почему в Go принято выходить из функции в ветке
ifи не писатьelseпосле неё. Пригодится в блоке 3, когда появятся свои функции. - Effective Go, раздел Switch — https://go.dev/doc/effective_go#switch
Какие условия ловит go vet (англ.)
- Анализатор bools — https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/bools Список подозрительных условий: suspect or, redundant and и другие.
Мини-опыты в ~/gocourse/day06/scratch
- Законы де Моргана. Для всех четырёх сочетаний
aиbнапечатайте
!(a && b) и !a || !b, потом !(a || b) и !a && !b. Какие пары всегда совпадают? Перепишите zone != 1 && zone != 2 через ! и скобки.
switchпо строке: статус заказа"new","paid","packed","sent". Что будет, если статус пришёл с заглавной буквы? Как это починить функцией из дня 04 прямо в строкеswitch?switchсfallthrough: скидки накапливаются — золотому клиенту положены и золотые, и серебряные, и обычные бонусы. Напишите это черезfallthrough, потом без него. Какой вариант проще проверить?- Сравните
if x > 0 { … } else if x == 0 { … } else { … }и три отдельныхifс теми же условиями. При каком наборе условий отдельныеifдадут другой результат, чем цепочка?