Как начать учить Go с нуля: план на первые четыре недели

Go — язык, на котором написаны Docker, Kubernetes и множество серверов. Он строгий, но небольшой: ключевых слов в нём всего 25, а программа собирается в один исполняемый файл. Поэтому Go хорошо подходит как первый «серьёзный» язык для бэкенда.

Ниже — план на первые четыре недели, по 30–60 минут в день. Главное правило: каждый день писать свой код, даже маленький. Чтение без практики почти ничего не оставляет.

План изучения Go на четыре недели

Неделя 1. Первая программа и основы

Вся программа на Go живёт в пакете main и начинается с функции main:

package main

import "fmt"

func main() {
	fmt.Println("Hello, Shop!")
}

Запустить её можно одной командой go run main.go — Go соберёт и сразу выполнит программу. Команда go build делает из кода отдельный файл, который потом запускается без установленного Go: так программы на Go и разворачивают на серверах.

Как запускается программа на Go

Что освоить за неделю:

  • переменные и типы: int, float64, string, bool; объявление через var и короткое :=;
  • арифметику и вывод через fmt.Println и fmt.Printf;
  • условия if / else и цикл for — в Go он единственный, без while.

Попробуйте сами: посчитайте сумму заказа из трёх товаров и примените скидку 10%, если сумма больше 5000.

Неделя 2. Функции, слайсы и map

Функции в Go могут возвращать несколько значений — это используется повсюду. Слайс — список значений, map — словарь «ключ → значение». Вот как посчитать, сколько заказов сделал каждый покупатель:

orders := []string{"anna", "ivan", "anna", "olga", "anna"}

count := map[string]int{}
for _, user := range orders {
	count[user]++
}
fmt.Println(count["anna"], count["ivan"], count["petr"]) // 3 1 0

Обратите внимание на count["petr"]: такого ключа нет, но программа не падает, а возвращает ноль — значение по умолчанию для int. Это удобно для счётчиков.

Неделя 3. Свои типы и ошибки

Структуры (struct) описывают свои типы данных — товар, заказ, пользователя. Методы — функции, привязанные к типу.

Самое непривычное для новичков — ошибки. В Go нет исключений: функция, которая может не сработать, возвращает ошибку вторым значением, и вызывающий код проверяет её сразу.

Ошибки в Go — обычные значения

func parsePrice(s string) (int, error) {
	price, err := strconv.Atoi(s)
	if err != nil {
		return 0, fmt.Errorf("цена %q: %w", s, err)
	}
	if price < 0 {
		return 0, fmt.Errorf("цена не может быть отрицательной: %d", price)
	}
	return price, nil
}

Для строк "1990", "abc" и "-5" эта функция вернёт цену 1990 и две понятные ошибки:

цена: 1990
ошибка: цена "abc": strconv.Atoi: parsing "abc": invalid syntax
ошибка: цена не может быть отрицательной: -5

Сначала if err != nil кажется многословным, но зато по коду всегда видно, где что-то может пойти не так.

Неделя 4. Настоящий проект

Последняя неделя — выйти из учебных примеров:

  • установить Go и создать модуль командой go mod init;
  • разбить код на пакеты и файлы;
  • поднять маленький HTTP-сервер на стандартном пакете net/http — без фреймворков;
  • собрать мини-API: список товаров и оформление заказа.

После этого у вас будет первый проект, который можно показать.

Частые ошибки новичков

Компилятор Go строгий — и это помогает. Вот что он скажет в первые дни:

Неиспользуемые переменные и импорты — ошибка, а не предупреждение.

"fmt" imported and not used
declared and not used: total

Удалите лишнее или используйте его — программа не соберётся, пока в ней есть «мусор».

Запись в пустой map без make роняет программу.

var stock map[string]int
stock["laptop"] = 5 // panic: assignment to entry in nil map

Создавайте map через make(map[string]int) или литерал map[string]int{}.

:= работает только внутри функций. Вне функции компилятор ответит non-declaration statement outside function body — там нужно писать var limit = 10.

Как не бросить

  • Пишите код каждый день, пусть по 20 минут. Перерыв в неделю почти обнуляет прогресс.
  • Читайте ошибки компилятора полностью: в Go они короткие и обычно точно говорят, что не так.
  • Решайте задачи с автоматической проверкой — так сразу видно, работает решение или нет, и не нужно ждать проверяющего.
  • Не прыгайте к фреймворкам, пока не освоили стандартную библиотеку: в Go на ней пишут реальные сервисы.

Этот план повторяет программу курса «Go: Основы» на Cova.Studio: короткая теория, квиз и задача с автопроверкой в каждом уроке, все примеры — на задачах интернет-магазина. Первый модуль бесплатный.