Приоритет логических операторов в Go
Отрицание выполняется раньше связки И, а связка И -
раньше связки ИЛИ. Знак ! относится к самому
высокому приоритету среди этих трех, затем идет
&&, затем ||.
Без скобок язык сначала применяет отрицание, потом связывает части через И, и только после этого собирает результат через ИЛИ. Так из одних и тех же литералов получается один определенный ответ.
Проверим порядок на примерах:
fmt.Println(!false && true) // true
fmt.Println(true || false && false) // true
Во второй строке сначала считают false && false,
получают false, затем true || false дает
true. Первая строка сначала переворачивает
false в true, затем связывает с
true через И. Еще один порядок такой:
fmt.Println(!true || false) // false
Выведите результат выражения
!false && false.
Выведите результат выражения
false || true && true.
Дана переменная:
a := true
Выведите результат выражения !a && a.