Используем условный оператор if в Go

User Rating: 0 / 5

В этой небольшой статье мы с вами посмотрим на использование оператора ветвления (или условного оператора) 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 тестовый пример (ссылка ниже).

Яндекс.Метрика