- Логические операторы
- Объявление переменных
- Строгая типизация
- Сравнение строк
- Использование в функциях
В Go логический тип (bool
) используется для представления двух значений: true
(истина) и false
(ложь).
Логические операторы
Логические операторы в Go позволяют комбинировать или изменять булевы значения (true
и false
). Они часто используются в условиях (if
, for
) и при построении сложных выражений.
Go поддерживает классические логические операции:
&&
— логическое «и» (возвращаетtrue
, если оба операнда истинны)||
— логическое «или» (возвращаетtrue
, если хотя бы один операнд истинен)!
— логическое «не» (инвертирует значение:!true
становитсяfalse
)==
— сравнение на равенство!=
— сравнение на неравенство
Примеры:
// false
true && false
// true
false || true
// true
!false
// true
true == true
// true
false != true
Объявление переменных
Переменные логического типа объявляются явно с использованием bool
или через вывод типа:
var isActive bool = true
var isAdmin bool = false
// или с выводом типа
isActive := true
isadmin := false
Переменные логического типа по умолчанию получают значение false
:
var flag bool
fmt.Println(flag)
// => false
Строгая типизация
Go — строго типизированный язык. Это значит, что логические значения нельзя смешивать с другими типами. Например, нельзя сравнивать bool
со строкой или числом:
// ошибка компиляции: mismatched types
true == "hello"
// тоже ошибка
true == 1
Чтобы проверить, что число не равно нулю, сравнение выполняют явно:
count := 5
// true
isPositive := count > 0
// false
isZero := count == 0
Для строк проверка также выполняется явно:
text := "Hexlet"
// false
isEmpty := text == ""
// true
isNotEmpty := text != ""
Булевы значения можно сравнивать только с булевыми:
isActive := true
fmt.Println(isActive == true)
// =>true
fmt.Println(isActive != false)
// =>true
Сравнение строк
Go позволяет сравнивать строки с помощью стандартных операторов:
- == — равно
- != — не равно
- <, >, <=, >= — лексикографическое сравнение (по порядку символов и длине)
Сравнение выполняется побайтно, в соответствии с кодировкой UTF-8.
"hexlet" == "hexlet"
// true
"go" < "golang"
// true
"beta" > "alpha"
// true
"foo" != "bar"
// true
Использование в функциях
Сравнения полезны даже без использования условных конструкций. Таким образом часто пишут функции-предикаты, то есть функции, которые выполняют проверки и возвращают булево значение.
func isEmpty(text string) bool {
return text == ""
}
func isEqual(a, b int) bool {
return a == b
}
func bothTrue(a, b bool) bool {
return a && b
}
Примеры вызовов:
isEmpty("")
// true
isEmpty("Hexlet")
// false
isEqual(4, 4)
// true
isEqual(4, 7)
// false
bothTrue(true, false)
// false
bothTrue(true, true)
// true