Перейти до основного вмісту
eLearner.app

Інтерактивний курс

Перейти на курс

Вивчайте Go з нуля англійською. Вправи зі статичною перевіркою та прямими посиланнями на офіційний Go Playground для запуску коду на реальному компіляторі.

Статична перевірка через ключові слова + виконання на офіцGo Playground(один клік для копіювання коду + відкриття).

01 · Модуль 1 — Основи мови

5 уроків

Основи: пакети, змінні, типи, константи, оператори та введення/виведення з пакетом fmt.

  1. 1.1Змінні та типиvar, коротке оголошення `:=`, основні типи (int, float64, string, bool) і концепція статичної типізації.~10 min
  2. 1.2Нульові перетворення значень і типівКожна змінна має значення за замовчуванням; перетворення є явними (`int(x)`, `string(b)`).~10 min
  3. 1.3Константи та йота`const`, нетипові константи та шаблон `iota` для створення читабельних перерахувань.~10 min
  4. 1.4ОператориАрифметика, порівняння, логіка та порозрядність; пріоритет і відмінності від інших мов.~8 min
  5. 1.5Введення/виведення з fmt`fmt.Println`, `fmt.Printf`, дієслова форматування (`%d`, `%s`, `%v`, `%T`) і коли віддавати перевагу одному над іншим.~10 min

02 · Модуль 2 — Потік керування

5 уроків

Рішення та повторення: якщо з операторами ініціалізації, єдиним `for`, ідіоматичним перемикачем і явною обробкою помилок.

  1. 2.1оператори if, else та init`if v := f(); v > 0 { ... }` і чому Go не має тернарного оператора.~10 min
  2. 2.2для: єдина петляТри форми `for`: з трьома пунктами, з однією умовою (= час) і нескінченне; використовуючи `break` і `continue`.~10 min
  3. 2.3для...дальностіПеребір фрагментів, карт і рядків; повернуте значення є копією, коли ігнорувати індекс або значення з `_`.~10 min
  4. 2.4Ідіоматичний перемикачЖодного неявного провалу, складних виразів у відмінках, перемикач без умови як ланцюжок if.~10 min
  5. 2.5Помилки: шаблон `if err != nil`Помилки - це значення; фундаментальний шаблон `if err != nil { return err }` і чому Go не має винятків.~12 min

03 · Модуль 3 — Функції

5 уроків

Функціонує як громадяни першого класу: підписи, численні повернення, варіативні параметри, закриття та `відкладення`.

  1. 3.1Підпис і параметриСинтаксис `назва функції (тип p) тип`, передача за значенням за умовчанням, параметри одного типу згруповані разом.~10 min
  2. 3.2Множинні повернення та іменовані поверненняПовернення кількох значень (`value, err`), іменований шаблон повернення та коли його НЕ використовувати.~12 min
  3. 3.3Варіативні функції`func sum(nums ...int) int`, розширення фрагмента за допомогою `slice...`, приклади з stdlib.~10 min
  4. 3.4Замикання та функції як значенняАнонімні функції, які фіксують змінні з навколишнього контексту; адаптер і заводські лекала.~12 min
  5. 3.5`defer`: гарантоване очищенняВідкласти виконання до повернення; шаблон `defer f.Close()`, порядок LIFO, проблеми всередині циклів.~12 min

04 · Модуль 4 — Колекції

5 уроків

Масиви, фрагменти (найважливіша структура), карти, руни всередині рядків і сортування.

  1. 4.1Масиви фіксованої довжиниСинтаксис `[N]T`, чому реальні масиви рідко використовуються в Go, перетворення з масиву на фрагмент.~8 min
  2. 4.2Зрізи: ідіоматична структура`make`, `append`, len/cap, нарізка `s[a:b]`, спільний доступ до базового масиву та час копіювання.~15 min
  3. 4.3Карти: ключі та значенняОголошення, доступ через кому (`v, ok := m[k]`), `видалити`, недетермінована ітерація.~12 min
  4. 4.4Рядки, байти та руниРядки мають UTF-8 байтів; `range` дає руни; `len()` підраховує байти, а не символи.~12 min
  5. 4.5Сортування за допомогою пакета sort`sort.Ints`, `sort.Strings`, `sort.Slice` з функцією порівняння, стабільність.~10 min

05 · Модуль 5 — Структури та методи

5 уроків

Складені типи даних: структури, методи для отримувачів значень або вказівників, композиція (без успадкування) і теги.

  1. 5.1Визначення та використання структури`type Person struct { Name string; Age int }`, позиційна чи іменована ініціалізація, анонімні структури.~12 min
  2. 5.2Методи: значення проти приймача покажчика`func (p Person) Hello()` проти `func (p *Person) Rename(n string)`; коли використовувати те чи інше.~14 min
  3. 5.3Композиція (вбудовування)Go не має успадкування: ви створюєте, вбудовуючи один тип в інший. Просування методу.~12 min
  4. 5.4Теги полів і JSON`json:"name,omitempty"`, маршалінг/демаршалінг за допомогою `encoding/json`, типові помилки.~12 min
  5. 5.5Шаблон конструктора `New...`Go не має конструкторів: угодою є функція `NewT(...) *T`, яка перевіряє та повертає помилки.~10 min

06 · Модуль 6 — Інтерфейси

5 уроків

Структурні інтерфейси (без явних реалізацій), твердження, перемикання типів і стандартні інтерфейси `Stringer` і `error`.

  1. 6.1Інтерфейси: визначення поведінкиІнтерфейс – це набір методів; той, хто їх реалізує, задовольняє його автоматично (статична качина типізація).~12 min
  2. 6.2Твердження типу`v, ok := i.(*MyT)`, форма коми-ok, щоб уникнути паніки, коли віддати перевагу твердженню над перемиканням типу.~10 min
  3. 6.3Перемикач типу`switch v := x.(type) { case int: ... }` для відправки на тип виконання.~10 min
  4. 6.4Інтерфейс StringerРеалізація `String() string` змінює те, як `fmt.Println` представляє ваш тип.~10 min
  5. 6.5Інтерфейс помилок`помилка` - це просто `рядок Error()`; створення спеціальних помилок, `errors.Is`, `errors.As`, `fmt.Errorf("%w", err)`.~14 min

07 · Модуль 7 — Паралелізм

5 уроків

Модель паралелізму Go: спрощені goroutines, канали зв’язку, `select`, синхронізація та контекст.

  1. 7.1Goroutines: легкий паралелізм`go f()`, вартість goroutine, чому main завершує роботу без очікування та як синхронізувати.~12 min
  2. 7.2Канали: типізований зв'язок`ch := make(chan int)`, `ch <- v`, `v := <-ch`, буферизовані та небуферизовані канали, закриття.~15 min
  3. 7.3`select`: мультиплексування каналівЗачекайте на перший готовий канал, регістр `default`, щоб уникнути блокування, шаблон тайм-ауту з `time.After`.~12 min
  4. 7.4`sync.Mutex` і `sync.WaitGroup`Якщо каналів недостатньо: захистіть спільний стан за допомогою Mutex, зачекайте N goroutine за допомогою WaitGroup.~14 min
  5. 7.5`context.Context`: скасування та крайні терміниРозповсюджувати скасування між goroutines, `context.WithTimeout`, `ctx.Done()`, шаблоном першого параметра.~14 min

08 · Модуль 8 — Основна стандартна бібліотека

5 уроків

Пакети, якими ви будете користуватися щодня: fmt, strings, strconv, io, os, time, encoding/json.

  1. 8.1Розширений `fmt``Sprintf`, `Fprintf`, дієслова `%+v` та `%#v`, форматування ширини та точності, прапорці `-` та `0`.~10 min
  2. 8.2`рядки` і `strconv``strings.Contains/Split/Join/TrimSpace`, `strconv.Itoa/Atoi/ParseInt/FormatFloat`.~12 min
  3. 8.3`io` і `os`: файли та потоки`os.Open/Create/ReadFile/WriteFile`, інтерфейси `io.Reader/Writer`, шаблон `defer f.Close()`.~14 min
  4. 8.4Пакет "час".`time.Now()`, тривалості, синтаксичний аналіз із еталонним макетом `2006-01-02 15:04:05`, таймери та тікери.~12 min
  5. 8.5`кодування/json``json.Marshal/Unmarshal`, теги struct, `json.Decoder/Encoder` для потоків, помилки аналізу.~14 min

09 · Модуль 9 — Тести, модулі та інструменти

5 уроків

Інструмент `go test`, тести на основі таблиць, тести, керування залежностями за допомогою `go mod` і теги побудови.

  1. 9.1Пакет «тестування».Файли `*_test.go`, функції `TestXxx(t *testing.T)`, `t.Error` проти `t.Fatal`, `go test ./...`.~12 min
  2. 9.2Табличні тестиІдіоматичний шаблон: фрагмент анонімних структур із входами та очікуваними результатами, `t.Run(name, ...)` для підтестів.~14 min
  3. 9.3Еталонні показники та профіліФункції `BenchmarkXxx(b *testing.B)`, `for i := 0; i < b.N; i++` цикл, `go test -bench=.`.~12 min
  4. 9.4Go модулі`go mod init`, `go get`, керування версіями семантичного імпорту, файл блокування `go.sum`, `go mod tidy`.~12 min
  5. 9.5Створення обмежень і тегівДиректива `//go:build ...` для кросплатформних збірок, розділення коду тестування/інтеграції, реальні приклади.~10 min

10 · Модуль 10 — Ідіоматична практика

5 уроків

Іменування, розширена обробка помилок, універсали (Go 1.18+) і два міні-проекти: CLI та HTTP-сервер.

  1. 10.1Правила іменування та стильPascalCase для експорту, CamelCase для місцевих, короткі назви в коротких областях, `gofmt` не підлягає обговоренню.~10 min
  2. 10.2Обробка ідіоматичних помилокПомилки Sentinel (`io.EOF`), спеціальні помилки з `Unwrap`, обгортання з `%w`, коли використовувати `panic`.~14 min
  3. 10.3Generics (Go 1.18+)Параметри типу `func Map[T, U any](s []T, f func(T) U) []U`, обмеження (`comparable`, custom), компроміси.~15 min
  4. 10.4Міні-проект: CLI з прапорцямиПакет `flag`, команди та підкоманди, коди виходу, `log` проти `fmt` для виведення.~18 min
  5. 10.5Міні-проект: HTTP сервер`net/http`, мінімальний обробник і маршрутизатор, проміжне програмне забезпечення як декоратори, зручне завершення роботи з контекстом.~18 min