Под рукой во время практики

Краткий справочник Go

Синтаксис, к которому удобно вернуться: короткие объяснения, небольшие примеры и переходы к урокам с практикой.

Навигация

7тем

Выберите раздел, чтобы перейти к нужной конструкции.

01

Переменные и типы

Объявляйте значения явно или используйте короткую форму внутри функций.

К уроку: Переменные и вывод

Короткое объявление

name := "Мира"
count := 3

Тип выводится из значения. Форма := доступна внутри функций.

Объявление через var

var city string = "Казань"
var ready bool

Без начального значения переменная получает нулевое значение своего типа.

Константа

const maxRetries = 5

Значение константы задаётся при объявлении и не меняется.

02

Условия и циклы

Ветвление и повторение строятся на компактных конструкциях языка.

К уроку: Условия и циклы

Условие

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)
}

Если одна из переменных не нужна, замените её на _.

03

Функции

Делите программу на небольшие действия с ясными входами и результатами.

К уроку: Функции и результаты

Параметры и результат

func add(a, b int) int {
	return a + b
}

Соседние параметры могут использовать общий тип.

Несколько результатов

func split(total, parts int) (int, int) {
	return total / parts, total % parts
}

Несколько возвращаемых значений часто используют для результата и ошибки.

04

Срезы и карты

Выбирайте срез для упорядоченного списка, map — для доступа по ключу.

К уроку: Массивы и срезы

Срез

scores := []int{8, 10, 9}
scores = append(scores, 7)

append возвращает срез; сохраняйте результат обратно.

Карта и проверка ключа

points := map[string]int{"Мира": 12}
value, ok := points["Мира"]

ok показывает, найден ли ключ, даже если значение равно нулю.

05

Структуры и методы

Связывайте данные и поведение в собственных типах.

К уроку: Структуры и методы

Структура

type Book struct {
	Title string
	Pages int
}

Поля структуры описывают данные одного значения.

Метод

func (b Book) Summary() string {
	return b.Title
}

Метод объявляется с получателем перед именем функции.

06

Ошибки

Go передаёт ошибки как значения и предлагает явно проверять результат.

К уроку: Ошибки и проверка входа

Проверка ошибки

value, err := strconv.Atoi("42")
if err != nil {
	return err
}

Проверяйте err сразу после вызова, который его возвращает.

Создание ошибки

return fmt.Errorf("прочитать файл: %w", err)

%w оборачивает исходную ошибку, сохраняя возможность её проверить.

07

Горутины и каналы

Запускайте работу параллельно и передавайте данные между задачами.

К уроку: Горутины и каналы

Запуск горутины

go process(item)

Вызов выполняется конкурентно; продумайте, как дождаться результата.

Передача через канал

results := make(chan string)
go func() { results <- load() }()
value := <-results

Небуферизованный канал связывает отправителя с получателем.