Вчимо Go з досвідом Python¶
Особисті конспект-нотатки для Python-розробника, який починає вивчати Go. Мета — пояснювати Go його власними категоріями, з короткими порівняннями з Python там, де вони допомагають загострити різницю, а не перетворити пояснення на переклад.
Усі матеріали орієнтовані на актуальний стабільний реліз Go — Go 1.26.4.
Як організовано матеріал¶
Кожна тема має свою нумеровану теку. Усередині теми конспекти й прикладні файли коду йдуть однією наскрізною нумерацією, тож порядок читання та запуску завжди очевидний.
Екосистема та встановлення¶
- Що таке Go — мова, спільнота, екосистема.
- Команда
go— кожна підкоманда, яку вам справді доведеться використовувати. go tool trace— трейсер виконання.- Типи файлів —
.go,_test.go,go.mod,go.sum, build-обмеження. - Спеціальні каталоги —
internal/,testdata/, конвенції. - Декілька версій Go —
GOTOOLCHAIN, директивиgoйtoolchain. - Встановлення — macOS, Linux, Windows.
- Додаткові інструменти —
gopls,dlv,golangci-lintта інші. - Демонстраційний проєкт — невеликий запускний модуль, який ілюструє все вищесказане.
Основи мови¶
- Змінні та константи —
var,:=,constтаiota. - Базові типи — цілі, дробові, рядки, булеві; без «правдивості».
- Перетворення типів — явне
T(x),strconv, без неявного приведення. - Оператори — арифметика, переповнення, цілочислове ділення; без тернарного.
- Керування потоком —
if,for(єдиний цикл),switch. - Функції — кілька значень, що повертаються, іменовані результати, варіативність, функції як значення.
- Помилки — значення
error, загортання через%w,errors.Is/As. - Вказівники —
&/*,nil,new, без арифметики вказівників. - Власні типи — визначення
typeпроти псевдонімів, базові типи. - Структури — поля, літерали, нульове значення, вбудовування, теги.
- Масиви та зрізи — len/cap,
appendі пастка спільного масиву-основи. - Map (асоціативні масиви) — пошук за ключем, comma-ok, пастка nil-map, множини.
- Вибір структури даних — зріз проти map проти структури проти власного типу.
- Defer — відкладені виклики, порядок LIFO, патерни прибирання.
- Panic та recover — коли панікувати, відновлення у відкладених викликах.
- Імпорти — шляхи імпорту, псевдоніми, порожній та крапковий імпорт.
Об'єктноорієнтований Go¶
- Методи — отримувачі за значенням і за вказівником, набори методів, підвищення.
- Інтерфейси — неявне задоволення, поліморфізм, порожній інтерфейс /
any. - Твердження типу та перемикачі типів — повернення конкретного типу під час виконання.
- Generics — параметри типу та обмеження.
- Патерни ООП — інкапсуляція, композиція замість успадкування, поліморфізм.
Пакети та модулі¶
- Пакети та видимість — правила пакетів, експортоване проти неекспортованого,
init. - Створення та публікація модуля —
go.mod, версіонування,replace, публікація. - Структура проєкту та робочі простори —
internal/,cmd/,go.work.
Конкурентність¶
- Горутини —
go, планування,WaitGroup, пастка завершення main. - Канали — надсилання/отримання, буферизація,
close,range, взаємні блокування. - select — мультиплексування,
default, таймаути, канали done. - Синхронізація —
Mutex,Once, атоміки, детектор гонитв. - Context — скасування, дедлайни, поширення.
- Патерни конкурентності — пули робітників, fan-out/fan-in, конвеєри.
Джерела¶
- Репозиторій з вихідним кодом: https://github.com/oduvan/learn-go-from-python.
- Наприкінці кожного конспекту перелічені офіційні джерела, з якими було звірено матеріал — як правило, go.dev, pkg.go.dev або специфікація Go.