Интерактивный курс
идти курсом
Изучите Go с нуля на английском языке. Упражнения со статической проверкой и прямыми ссылками на официальную площадку Go Playground для запуска вашего кода на реальном компиляторе.
Статическая проверка по ключевым словам + исполнение на официалеGo Playground(один клик для копирования кода + открытия).
01 · Модуль 1 — Основы языка
Основы: пакеты, переменные, типы, константы, операторы и ввод/вывод с помощью пакета fmt.
- 1.1Переменные и типыvar, краткое объявление `:=`, базовые типы (int, float64, string, bool) и концепция статической типизации.~10 min
- 1.2Нулевое значение и преобразование типовКаждая переменная имеет значение по умолчанию; преобразования являются явными (`int(x)`, `string(b)`).~10 min
- 1.3Константы и йотаconst, нетипизированные константы и шаблон iota для создания читаемых перечислений.~10 min
- 1.4ОператорыАрифметика, сравнение, логическое и побитовое; приоритет и отличия от других языков.~8 min
- 1.5Ввод/вывод с помощью fmt`fmt.Println`, `fmt.Printf`, глаголы форматирования (`%d`, `%s`, `%v`, `%T`) и когда отдавать предпочтение одному другому.~10 min
02 · Модуль 2 — Поток управления
Решения и повторения: если с операторами инициализации, одиночный `for`, идиоматический переключатель и явная обработка ошибок.
- 2.1операторы if, else и init`if v := f(); v > 0 { ... }` и почему в Go нет тернарного оператора.~10 min
- 2.2for: единственный циклТри формы `for`: три предложения, одно условие (= while) и бесконечное; используя `break` и `continue`.~10 min
- 2.3для...диапазонаПеребирайте фрагменты, карты и строки; возвращаемое значение является копией, когда игнорировать индекс или значение с `_`.~10 min
- 2.4Идиоматический переключательНикаких неявных провалов, сложные выражения в падежах, переключение без условия в виде цепочки if.~10 min
- 2.5Ошибки: шаблон `if err != nil`Ошибки — это ценности; фундаментальный шаблон `if err != nil { return err }` и почему в Go нет исключений.~12 min
03 · Модуль 3 — Функции
Функционирует как первоклассные граждане: подписи, множественные возвраты, переменные параметры, замыкания и «отсрочка».
- 3.1Подпись и параметрыСинтаксис `func name(p type) type`, передача по значению по умолчанию, параметры одного типа сгруппированы вместе.~10 min
- 3.2Множественные возвраты и именованные возвратыВозврат нескольких значений («value, err»), указанный шаблон возврата и случаи, когда его НЕ следует использовать.~12 min
- 3.3Вариадические функции`func sum(nums ...int) int`, распространение фрагмента с помощью `slice...`, примеры из stdlib.~10 min
- 3.4Замыкания и функции как значенияАнонимные функции, которые извлекают переменные из окружающего контекста; адаптер и заводские лекалы.~12 min
- 3.5`defer`: гарантированная очисткаОтложить исполнение до возвращения; шаблон `defer f.Close()`, порядок LIFO, ошибки внутри циклов.~12 min
04 · Модуль 4 — Коллекции
Массивы, срезы (самая важная структура), карты, руны внутри строк и сортировка.
- 4.1Массивы фиксированной длиныСинтаксис `[N]T`, почему в Go редко используются настоящие массивы, преобразование из массива в срез.~8 min
- 4.2Срезы: идиоматическая структура`make`, `append`, len/cap, нарезка `s[a:b]`, совместное использование базового массива и время копирования.~15 min
- 4.3Карты: ключи и значенияОбъявление, доступ через запятую (`v, ok := m[k]`), `delete`, недетерминированная итерация.~12 min
- 4.4Строки, байты и руныСтроки представляют собой байты UTF-8; `range` дает руны; `len()` считает байты, а не символы.~12 min
- 4.5Сортировка с помощью пакета sort`sort.Ints`, `sort.Strings`, `sort.Slice` с функцией сравнения, стабильность.~10 min
05 · Модуль 5 — Структуры и методы
Составные типы данных: структуры, методы для приемников значений или указателей, композиция (без наследования) и теги.
- 5.1Определение и использование структуры`type Person struct { Name string; Возраст int }`, позиционная и именованная инициализация, анонимные структуры.~12 min
- 5.2Методы: значение и приемник указателя`func (p Person) Hello()` vs `func (p *Person) Rename(n string)`; когда использовать тот или иной вариант.~14 min
- 5.3Композиция (вложение)В Go нет наследования: вы компонуете, встраивая один тип в другой. Метод продвижения.~12 min
- 5.4Теги полей и JSON`json:"name,omitempty"`, маршалинг/демаршалинг с помощью `encoding/json`, распространенные ошибки.~12 min
- 5.5Шаблон конструктора `New...`В Go нет конструкторов: соглашением является функция NewT(...) *T, которая проверяет и возвращает ошибки.~10 min
06 · Модуль 6 — Интерфейсы
Структурные интерфейсы (без явных реализаций), утверждения, переключатели типов и стандартные интерфейсы Stringer и error.
- 6.1Интерфейсы: определение поведенияИнтерфейс — это набор методов; тот, кто их реализует, удовлетворяет их автоматически (статическая утиная типизация).~12 min
- 6.2Тип утверждения`v, ok := i.(*MyT)`, форма запятая-ок, чтобы избежать паники, когда предпочтение отдается утверждению, а не переключению типа.~10 min
- 6.3Тип переключателя`switch v := x.(type) { case int: ... }` для отправки по типу среды выполнения.~10 min
- 6.4Интерфейс СтрингераРеализация `String() string` меняет способ представления вашего типа `fmt.Println`.~10 min
- 6.5Интерфейс ошибки`error` — это просто `Error() string`; создание пользовательских ошибок `errors.Is`, `errors.As`, `fmt.Errorf("%w", err)`.~14 min
07 · Модуль 7 — Параллелизм
Модель параллелизма Go: легкие горутины, каналы для связи, выбор, синхронизация и контекст.
- 7.1Горутины: легкий параллелизм`go f()`, стоимость горутины, почему main завершает работу без ожидания и как синхронизировать.~12 min
- 7.2Каналы: типизированное общение`ch := make(chan int)`, `ch <- v`, `v := <-ch`, буферизованные и небуферизованные каналы, закрытие.~15 min
- 7.3`select`: мультиплексирование каналовДождитесь первого готового канала, случай «по умолчанию», чтобы избежать блокировки, шаблон тайм-аута с «time.After».~12 min
- 7.4`sync.Mutex` и `sync.WaitGroup`Когда каналов недостаточно: защитите общее состояние с помощью мьютекса, дождитесь N горутин с помощью группы ожидания.~14 min
- 7.5`context.Context`: отмена и срокиРаспространение отмены по горутинам, `context.WithTimeout`, `ctx.Done()`, шаблон первого параметра.~14 min
08 · Модуль 8 — Основная стандартная библиотека
Пакеты, которые вы будете использовать каждый день: fmt, strings, strconv, io, os, time,coding/json.
- 8.1Расширенный `fmt``Sprintf`, `Fprintf`, глаголы `%+v` и `%#v`, форматирование ширины и точности, флаги `-` и `0`.~10 min
- 8.2`строки` и `strconv``strings.Contains/Split/Join/TrimSpace`, `strconv.Itoa/Atoi/ParseInt/FormatFloat`.~12 min
- 8.3`io` и `os`: файлы и потоки`os.Open/Create/ReadFile/WriteFile`, интерфейсы `io.Reader/Writer`, шаблон `defer f.Close()`.~14 min
- 8.4Пакет «Время»`time.Now()`, длительность, синтаксический анализ со ссылочным макетом `2006-01-02 15:04:05`, таймеры и тикеры.~12 min
- 8.5`кодировка/json``json.Marshal/Unmarshal`, теги структуры, `json.Decoder/Encoder` для потоков, ошибки синтаксического анализа.~14 min
09 · Модуль 9. Тесты, модули и инструменты
Инструмент go test, табличные тесты, тесты, управление зависимостями с помощью go mod и теги сборки.
- 9.1Пакет «Тестирование»файлы `*_test.go`, функции `TestXxx(t *testing.T)`, `t.Error` vs `t.Fatal`, `go test ./...`.~12 min
- 9.2Табличные тестыИдиоматический шаблон: фрагмент анонимных структур с входными и ожидаемыми выходными данными, `t.Run(name, ...)` для подтестов.~14 min
- 9.3Тесты и профили`BenchmarkXxx(b *testing.B)`, `for i := 0; я < б.Н; цикл i++`, `go test -bench=.`.~12 min
- 9.4Модули Go`go mod init`, `go get`, управление версиями семантического импорта, файл блокировки `go.sum`, `go mod tidy`.~12 min
- 9.5Создание ограничений и теговДиректива `//go:build ...` для кроссплатформенных сборок, разделение кода тестирования и интеграции, примеры из реальной жизни.~10 min
10 · Модуль 10 — Идиоматическая практика
Именование, расширенная обработка ошибок, дженерики (Go 1.18+) и два мини-проекта: CLI и HTTP-сервер.
- 10.1Соглашения об именах и стильPascalCase для экспорта, CamelCase для локальных пользователей, короткие имена в коротких областях, `gofmt` не подлежит обсуждению.~10 min
- 10.2Идиоматическая обработка ошибокОшибки Sentinel (io.EOF), пользовательские ошибки с помощью Unwrap, перенос с помощью %w, когда использовать Panic.~14 min
- 10.3Дженерики (Go 1.18+)Параметры типа `func Map[T, U Any](s []T, f func(T) U) []U`, ограничения («сопоставимые», пользовательские), компромиссы.~15 min
- 10.4Мини-проект: CLI с флагамиПакет flag, команды и подкоманды, коды выхода, log и fmt для вывода.~18 min
- 10.5Мини-проект: HTTP-сервер`net/http`, минимальный обработчик и маршрутизатор, промежуточное программное обеспечение в качестве декораторов, плавное завершение работы с контекстом.~18 min