Циклы for и условия if в Go: аналог while и примеры
Введение
В Go нет отдельного ключевого слова while. Чтобы повторять действие, пока условие истинно, используют for с одним условием: например, for n < 5 { ... }. Ниже разберём этот вариант, цикл со счётчиком, перебор через range и условия if.
Оператор if
Оператор if используются для принятия решений в программе на основе определённых условий. Он позволяет коду выполнять разные действия в зависимости от того, истинно условие или ложно.
Базовый синтаксис оператора if выглядит так:
Базовый синтаксис
if condition { // Код, который будет выполнен, если условие истинно }
Условие — это выражение, которое возвращает значение типа bool. Если условие истинно, то выполняется блок кода внутри фигурных скобок. Если условие ложно, то блок кода пропускается.
Например, вот простой пример использования оператора if:
package main import "fmt" func main() { age := 25 if age >= 18 { fmt.Println("Вам уже можно голосовать!") } }
В этом примере мы используем оператор if для проверки возраста пользователя. Если возраст больше или равен 18 годам, то выводится сообщение «Вам уже можно голосовать!».
If-Else
Кроме базового синтаксиса, операторы if могут иметь расширенный синтаксис с блоками else и else if. Блок else выполняется, если условие в операторе if ложно. Блок else if используется для проверки дополнительных условий, если основное условие ложно.
Базовый синтаксис:
if condition { // Код, который будет выполнен, если условие истинно } else { // Код, который будет выполнен, если условие ложно }
Пример использования блоков else и else if:
package main import "fmt" func main() { age := 20 if age >= 18 { fmt.Println("Вам уже можно голосовать!") } else if age >= 16 { fmt.Println("Вам скоро можно будет голосовать!") } else { fmt.Println("Вам ещё рано голосовать!") } }
В этом примере мы проверяем возраст пользователя и выводим соответствующее сообщение в зависимости от его значения. Если возраст больше или равен 18 годам, то выводится сообщение «Вам уже можно голосовать!». Если возраст больше или равен 16 годам, но меньше 18, то выводится сообщение «Вам скоро можно будет голосовать!». Если возраст меньше 16 лет, то выводится сообщение «Вам ещё рано голосовать!».
If и короткие действия
В Go вы можете сначала выполнить короткое действие, например присвоить значение переменной, а затем использовать эту переменную в условии оператора if. Это удобно, когда вам нужно проверить какое-либо условие, используя значение, полученное в результате короткого вычисления.
Базовый синтаксис:
if shortStatement; condition { // Код, который будет выполнен, если условие истинно }
Вот пример использования короткого оператора перед условием:
package main import "fmt" func main() { if age := 18; age >= 18 { fmt.Println("Вам уже можно голосовать!") } }
В этом примере мы сначала присваиваем значение 18 переменной age с помощью короткого оператора :=. Затем мы используем эту переменную в условии оператора if. Если возраст больше или равен 18 годам, то выводится сообщение «Вам уже можно голосовать!».
Циклы
В Go есть только одна конструкция цикла: цикл for. Однако он универсален и может использоваться несколькими способами.
Базовый цикл For
for initialization; condition; post { // код, который необходимо повторить }
Пример:
for i := 0; i < 5; i++ { fmt.Println(i) }
Цикл в стиле While
Аналог while в Go — цикл for с одним условием. Условие проверяется перед каждой итерацией. Если оно сразу ложно, тело цикла не выполнится ни разу. Инициализацию и изменение переменной при необходимости выполняют отдельно:
for condition { // код, который необходимо повторить }
Пример:
n := 1 for n < 5 { fmt.Println(n) n *= 2 }
Этот код напечатает числа 1, 2 и 4, так как цикл будет выполняться до тех пор, пока n меньше 5. Когда n станет равным 8, условие n < 5 станет ложным, и выполнение цикла завершится.
Если убрать n *= 2, значение останется равным 1 и цикл не завершится сам. Убедитесь, что условие сможет стать ложным, либо предусмотрите выход через break или return. Такой способ записи описан в официальном туре Go.
Бесконечный цикл
Если вы опустите условие, вы получите бесконечный цикл.
for { // код, который необходимо повторить }
Пример:
for { fmt.Println("This will print forever") }
Цикл For на основе диапазона
Форма range цикла for позволяет перебирать элементы массива, среза или map, руны строки и значения из канала. Примеры работы с коллекциями есть в статье «Срезы, массивы и map в Go», а получение значений до закрытия канала — в статье о каналах в Go.
for index, value := range collection { // повторяющийся код для каждого элемента в коллекции }
Пример:
fruits := []string{"apple", "banana", "cherry"} for index, fruit := range fruits { fmt.Printf("Index: %d, Fruit: %s\n", index, fruit) }
Вывод:
Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: cherry
Break and Continue
breakиспользуется для преждевременного выхода из цикла.continueиспользуется для пропуска оставшейся части текущей итерации и перехода к следующей.
Пример:
for i := 0; i < 10; i++ { if i == 3 { continue // пропуск вывода 3 в терминал } if i == 7 { break // остановка работы цикла, когда значение i равно 7 } fmt.Println(i) }
Связанные темы
Для более полного понимания языка Go, рекомендуем также ознакомиться со следующими нашими статьями:
- Асинхронное программирование в Go - для работы с горутинами и каналами
- Файловые операции в Go - для работы с файлами
- Модули в Go - для организации кода
Список рекомендуемых источников
- "The Go Programming Language" by Alan A. A. Donovan and Brian W. Kernighan
- "Go in Action" by William Kennedy, Brian Ketelsen, and Erik St. Martin
- "Learning Go" by Jon Bodner
- Official Go Tour: https://tour.golang.org/
- Go by Example: https://gobyexample.com/
- Effective Go: https://golang.org/doc/effective_go.html
Помните, что практика — ключ к освоению этих структур управления. Попробуйте написать собственные программы, используя операторы if и циклы для решения различных задач. Приятной разработки!