В этой небольшой статье мы с вами посмотрим на использование оператора ветвления (или условного оператора) if в языке Go. Название оператора совпадает с тем, как он называется в большинстве (если не во всех) других языках программирования, но при его использовании в Go есть некоторые нюансы. Какие именно мы сейчас посмотрим.
Ниже я сразу привожу пример сниппета кода, ссылка на который для его запуска в Visual Studio Code приложена внизу этой статьи:
package ain_if_statements
import (
"strconv"
"allineed.ru/x/examples/ain_common"
)
func RunSample() {
ain_common.PrintExampleTitle(
"Используем условный оператор if в Go",
"Using conditional operator if in Go",
"https://allineed.ru/development/go-development/60-go-using-if-statement")
ain_common.PrintlnLocalized(
"1) Демонстрация константных выражений в операторе 'if':",
"1) Demo of constant expressions in 'if' statement:")
if 10%2 == 0 {
ain_common.PrintlnLocalizedWithTab("10 - чётное число", "10 is even")
} else {
ain_common.PrintlnLocalizedWithTab("10 - нечётное число", "10 is odd")
}
ain_common.PrintlnLocalized(
"2) Демонстрация инициализации переменной с последующей проверкой значения в операторе 'if':",
"2) Demo of variable initialization with further check of its value in the 'if' statement:")
if x := 1; x > 10 {
ain_common.PrintlnLocalizedStringsWithTab(
ain_common.NewLocalizedStrings(strconv.Itoa(x), " больше 10"),
ain_common.NewLocalizedStrings(strconv.Itoa(x), " less than 10"))
} else if x < 0 {
ain_common.PrintlnLocalizedStringsWithTab(
ain_common.NewLocalizedStrings(strconv.Itoa(x), " меньше 0"),
ain_common.NewLocalizedStrings(strconv.Itoa(x), " less than 0"))
} else {
ain_common.PrintlnLocalizedStringsWithTab(
ain_common.NewLocalizedStrings(strconv.Itoa(x), " больше или равен 0 и меньше или равен 10"),
ain_common.NewLocalizedStrings(strconv.Itoa(x), " is greater or equal 0 and less or equal 10"))
}
ain_common.PrintlnLocalized(
"3) Демонстрация присваивания значений нескольким переменным одновременно и затем использование переменных в операторе 'if'::",
"3) Demo of assigning values for several variables and further usage of these variables in the 'if' statement:")
y, z, t := 10, 20, 99
if (y > 0 && z > 0) || t < -20 {
ain_common.PrintlnLocalizedStringsWithTab(
ain_common.NewLocalizedStrings(strconv.Itoa(y), " и ", strconv.Itoa(z), " оба больше 0 или ", strconv.Itoa(t), " < -20"),
ain_common.NewLocalizedStrings(strconv.Itoa(y), " and ", strconv.Itoa(z), " are both greater than 0 or ", strconv.Itoa(t), " < -20"))
} else {
ain_common.PrintlnLocalizedStringsWithTab(
ain_common.NewLocalizedStrings("Как минимум ", strconv.Itoa(y), " или ", strconv.Itoa(z), " не больше 0, либо ", strconv.Itoa(t), " > -20"),
ain_common.NewLocalizedStrings("At least one of ", strconv.Itoa(y), " or ", strconv.Itoa(z), " are not greater than 0, or ", strconv.Itoa(t), " > -20"))
}
}
Пакет ain_common нужен для всех тестовых примеров и сниппетов на Go, в нём есть различные служебные функции (в частности, для вывода на консоль результатов примера. для простоты можно считать, что это тот же fmt.Println() вызов).
Итак, первое, что бросается нам в глаза - это отсутствие необходимости указывать какие-либо круглые скобки после if, т.е. мы можем просто написать что-то вроде:
if 10%2 == 0 {
// выполнить команды, если 10 - чётное число
} else {
// выполнить команды, если вдруг 10 - нечётное число, но сюда мы никогда не попадём
}
Также примечательным моментом использования оператора if в языке Go является возможность инициализации переменной значением, то есть подобная конструкция:
if x := 1; x > 10 {
// команды, когда x больше 10
} else if x < 0 {
// команды, когда x меньше нуля
} else {
// сюда мы попадём во всех остальных случаях, а именно, когда x меньше или равен 10 и x больше или равен нулю
}
В остальном оператор if в языке Go используется очень похожим образом, как это делается в языках Java, C, C++, C# - мы можем вообще не указывать блоки else if и else, если так угодно. А можем указать несколько блоков else if, но без блока else - здесь нам, как разработчикам, предоставляется вся необходимая гибкость для реализации нужной логики для нашей программы на Go.
В целом, всё довольно просто, не правда ли? Если остались вопросы - пишите в комментариях, а также можете поупражняться и запустить под отладкой в Visual Studio Code тестовый пример (ссылка ниже).
Примеры из этой статьи: https://github.com/AllineedRu/GoExamples/blob/main/ain_if_statements/sample.go