Короткое объявление
name := "Мира"
count := 3Тип выводится из значения. Форма := доступна внутри функций.
Под рукой во время практики
Синтаксис, к которому удобно вернуться: короткие объяснения, небольшие примеры и переходы к урокам с практикой.
Навигация
7тем
Выберите раздел, чтобы перейти к нужной конструкции.
Объявляйте значения явно или используйте короткую форму внутри функций.
name := "Мира"
count := 3Тип выводится из значения. Форма := доступна внутри функций.
var city string = "Казань"
var ready boolБез начального значения переменная получает нулевое значение своего типа.
const maxRetries = 5Значение константы задаётся при объявлении и не меняется.
Ветвление и повторение строятся на компактных конструкциях языка.
if score >= 60 {
fmt.Println("зачёт")
} else {
fmt.Println("повторить")
}Круглые скобки вокруг условия не нужны; фигурные скобки обязательны.
for i := 0; i < 3; i++ {
fmt.Println(i)
}for — единственная конструкция цикла в Go.
for index, value := range values {
fmt.Println(index, value)
}Если одна из переменных не нужна, замените её на _.
Делите программу на небольшие действия с ясными входами и результатами.
func add(a, b int) int {
return a + b
}Соседние параметры могут использовать общий тип.
func split(total, parts int) (int, int) {
return total / parts, total % parts
}Несколько возвращаемых значений часто используют для результата и ошибки.
Выбирайте срез для упорядоченного списка, map — для доступа по ключу.
scores := []int{8, 10, 9}
scores = append(scores, 7)append возвращает срез; сохраняйте результат обратно.
points := map[string]int{"Мира": 12}
value, ok := points["Мира"]ok показывает, найден ли ключ, даже если значение равно нулю.
Связывайте данные и поведение в собственных типах.
type Book struct {
Title string
Pages int
}Поля структуры описывают данные одного значения.
func (b Book) Summary() string {
return b.Title
}Метод объявляется с получателем перед именем функции.
Go передаёт ошибки как значения и предлагает явно проверять результат.
value, err := strconv.Atoi("42")
if err != nil {
return err
}Проверяйте err сразу после вызова, который его возвращает.
return fmt.Errorf("прочитать файл: %w", err)%w оборачивает исходную ошибку, сохраняя возможность её проверить.
Запускайте работу параллельно и передавайте данные между задачами.
go process(item)Вызов выполняется конкурентно; продумайте, как дождаться результата.
results := make(chan string)
go func() { results <- load() }()
value := <-resultsНебуферизованный канал связывает отправителя с получателем.