/
Программирование
/
Курс Golang
/

Альтернативная условная конструкция

Golang: Альтернативная условная конструкция

В Go, кроме привычного if, есть ещё одна конструкция ветвления — switch. Она используется для выбора одного из нескольких возможных путей выполнения кода. На первый взгляд switch в Go похож на аналогичную конструкцию из других языков (например, C или Java), но его поведение отличается в важных деталях.

x := 10

switch x {
case 10:
	fmt.Println("case 10")
default:
	fmt.Println("default case")
}

Вывод:

case 10

В этом примере x сравнивается с каждым case. Как только находится совпадение, выполняется соответствующий блок, и switch завершается автоматически — писать break не нужно. Кроме того, default не обязан идти последним — он всегда выполняется в последнюю очередь, если не было совпадений.

Можно использовать switch без выражения. В этом случае он работает как if-else if, проверяя условия по порядку:

x := 10

switch {
case x < 0:
	fmt.Println("negative")
case x == 0:
	fmt.Println("zero")
case x > 0:
	fmt.Println("positive")
}

Вывод:

positive

Такой вариант удобен, когда нужно проверить набор условий, а не одно значение.

Ключевое слово fallthrough

В Go по умолчанию не происходит проваливания в следующий case, как это бывает в других языках. Но если вы хотите принудительно продолжить выполнение следующего блока, можно использовать fallthrough:

x := 10

switch {
case x == 10:
	fmt.Println("equal 10 case")
	fallthrough
case x < 20:
	fmt.Println("less than 20 case")
}

Вывод:

equal 10 case
less than 20 case

Ключевое слово fallthrough всегда выполняет следующий case, даже если его условие не подходит. Это может привести к неожиданному поведению, поэтому используется редко и осознанно.

Задание

Реализуйте функцию ModifySpaces(s, mode string) string, которая изменяет строку s в зависимости от переданного режима mode. Подробности в примере:

// когда передается mode "dash", нужно заменить все пробелы на дефисы "-"
ModifySpaces("hello world", "dash") // hello-world

// когда передается mode "underscore", нужно заменить все пробелы на нижние подчеркивания "_"
ModifySpaces("hello world", "underscore") // hello_world

// когда передается неизвестный или пустой mode, заменяем все пробелы на звездочки "*"
ModifySpaces("hello world", "unknown") // hello*world
ModifySpaces("hello world", "")        // hello*world

Для замены символов в строке существует функция ReplaceAll(s, old, new string) string из пакета strings:

strings.ReplaceAll("hello world!", "world!", "buddy!") // hello buddy!
strings.ReplaceAll("one two three", " ", "_") // one_two_three

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются