Golang: Условные конструкции
В любой программе часто требуется выполнять разные действия в зависимости от условий. Для этого в Go, как и в большинстве языков программирования, используется конструкция if.
Базовый синтаксис
if условие {
// код, который выполнится, если условие истинно (true)
}Пример
age := 18
if age >= 18 {
fmt.Println("Access granted")
}
// => Access grantedУсловие else
Если нужно выполнить другой код в случае, когда условие ложно (false), добавляется блок else:
age := 14
if age >= 18 {
fmt.Println("Access granted")
} else {
fmt.Println("Access denied")
}
// => Access deniedКогда условий больше двух, можно использовать цепочку else if:
score := 85
if score >= 90 {
fmt.Println("Grade: A")
} else if score >= 80 {
fmt.Println("Grade: B")
} else {
fmt.Println("Grade: C or lower")
}
// Grade: BОсобенности if в Go
- В Go не ставятся круглые скобки вокруг условия.
- Тело
ifобязательно должно быть в фигурных скобках{}, даже если там одна строка. - Условие должно быть логического типа
bool. Например, такой код вызовет ошибку компиляции:if 1 { fmt.Println("Ошибка") // non-boolean condition in if statement }
Логические выражения в условиях
В условии if можно использовать логические операторы (&&, ||, !) для составления сложных проверок:
age := 20
isRegistered := true
if age >= 18 && isRegistered {
fmt.Println("Access granted")
}
// => Access grantedКраткая форма объявления переменной
Go позволяет объявить переменную прямо в условии if. Эта переменная будет доступна только внутри блока if и его else:
if n := len("hello"); n > 3 {
// n существует
fmt.Println("String is long enough:", n)
} else {
// и здесь n существует тоже
fmt.Println("String too short:", n)
}
// Здесь n уже не существует
// => String is long enough: 5Отсутствие тернарного оператора
В Go, как и в Python нет тернарного оператора (?:), который встречается в других языках. Для выбора значения, используется обычный if:
age := 16
status := ""
if age >= 18 {
status = "adult"
} else {
status = "minor"
}
fmt.Println(status)
// => minorЗадание
На веб-сайтах часто используются разные поддомены для языков. Например, сайт site.com на английском располагается по адресу en.site.com, а на русском — ru.site.com.
Реализуйте функцию DomainForLocale(domain, locale string) string, которая добавляет язык locale как поддомен к домену domain. Язык может прийти пустым, тогда нужно добавить поддомен en.. Например:
DomainForLocale("site.com", "") // en.site.com
DomainForLocale("site.com", "fr") // fr.site.com
DomainForLocale("site.com", "es") // es.site.comПолезное
Golang: Условные конструкции
В любой программе часто требуется выполнять разные действия в зависимости от условий. Для этого в Go, как и в большинстве языков программирования, используется конструкция if.
Базовый синтаксис
if условие {
// код, который выполнится, если условие истинно (true)
}Пример
age := 18
if age >= 18 {
fmt.Println("Access granted")
}
// => Access grantedУсловие else
Если нужно выполнить другой код в случае, когда условие ложно (false), добавляется блок else:
age := 14
if age >= 18 {
fmt.Println("Access granted")
} else {
fmt.Println("Access denied")
}
// => Access deniedКогда условий больше двух, можно использовать цепочку else if:
score := 85
if score >= 90 {
fmt.Println("Grade: A")
} else if score >= 80 {
fmt.Println("Grade: B")
} else {
fmt.Println("Grade: C or lower")
}
// Grade: BОсобенности if в Go
- В Go не ставятся круглые скобки вокруг условия.
- Тело
ifобязательно должно быть в фигурных скобках{}, даже если там одна строка. - Условие должно быть логического типа
bool. Например, такой код вызовет ошибку компиляции:if 1 { fmt.Println("Ошибка") // non-boolean condition in if statement }
Логические выражения в условиях
В условии if можно использовать логические операторы (&&, ||, !) для составления сложных проверок:
age := 20
isRegistered := true
if age >= 18 && isRegistered {
fmt.Println("Access granted")
}
// => Access grantedКраткая форма объявления переменной
Go позволяет объявить переменную прямо в условии if. Эта переменная будет доступна только внутри блока if и его else:
if n := len("hello"); n > 3 {
// n существует
fmt.Println("String is long enough:", n)
} else {
// и здесь n существует тоже
fmt.Println("String too short:", n)
}
// Здесь n уже не существует
// => String is long enough: 5Отсутствие тернарного оператора
В Go, как и в Python нет тернарного оператора (?:), который встречается в других языках. Для выбора значения, используется обычный if:
age := 16
status := ""
if age >= 18 {
status = "adult"
} else {
status = "minor"
}
fmt.Println(status)
// => minorЗадание
На веб-сайтах часто используются разные поддомены для языков. Например, сайт site.com на английском располагается по адресу en.site.com, а на русском — ru.site.com.
Реализуйте функцию DomainForLocale(domain, locale string) string, которая добавляет язык locale как поддомен к домену domain. Язык может прийти пустым, тогда нужно добавить поддомен en.. Например:
DomainForLocale("site.com", "") // en.site.com
DomainForLocale("site.com", "fr") // fr.site.com
DomainForLocale("site.com", "es") // es.site.comПолезное
Ваше упражнение проверяется по этим тестам
package solution
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestDomainForLocale(t *testing.T) {
a := assert.New(t)
a.Equal("en.code-basics.com", DomainForLocale("code-basics.com", ""))
a.Equal("ru.code-basics.com", DomainForLocale("code-basics.com", "ru"))
a.Equal("vn.code-basics.com", DomainForLocale("code-basics.com", "vn"))
}Решение учителя откроется через:
20:00
