Курс по Go — от нулата до писането на добра програма
От Dorian Chávez, основател на Hábil и архитект на интеграции. Така обучаваме тези, които изграждат системи, които не могат да се провалят.
За кого е: за някой, който тепърва започва — първа година в университета или току-що завършил училище. Не приемаме нищо за даденост: нито че имаш инсталиран Go, нито че знаеш какво е указател, нито какво означава да компилираш. Всяко понятие се обяснява, когато се появи, и се обяснява защо съществува, а не само как се пише.
Какво ще знаеш накрая: да напишеш пълна програма, да разбираш какво си написал и да можеш да го обясниш на някой друг. Последното е истинската проверка.
Какво ти трябва, преди да започнеш: компютър с Linux Mint и да знаеш как да отвориш терминал. Нищо повече. Урок 1 инсталира всичко от нулата.
Проектът, който ще изградиш
Програма за командния ред, наречена revisor: получава списък с услуги, проверява ги
всички едновременно и създава отчет в таблица или в JSON.
$ revisor --config servicios.txt --formato tabla
SERVICIO ESTADO TIEMPO DETALLE
catalogo OK 142ms 200
inventario LENTO 2.3s 200
pagos OK 87ms 200
reportes FALLA — connection refused
Изглежда малка, но не е: за да я напишеш добре, ти трябват structs, интерфейси, грешки, конкурентност,
context, HTTP, JSON, флагове от командния ред, тестове и пакетиран двоичен файл.
И това е скелетът на онова, което хората наистина пишат на Go. Според Go Developer Survey 2025 — официалното проучване на екипа на Go, проведено през септември 2025 г. с 5,379 отговора —, двата най-често изграждани вида проекти са:
| Какво изграждат | |
|---|---|
| Инструменти за командния ред | 74 % |
| API/RPC услуги | 73 % |
| Библиотеки или работни рамки (frameworks) | 49 % |
revisor е първото, а в Урок 7 му добавяш второто.
⚠️ И ще я напишеш отново на Rust, в сестринския курс. Писането на една и съща програма на двата езика е онова, което наистина учи по какво се различават; четенето на сравнения не помага.
Осемте урока
| Урок | Какво изграждаш | Какво научаваш | |
|---|---|---|---|
| 0 | Какво е Go | още нищо (четене) | откъде се появи Go, за какво служи и за какво не |
| 1 | Инсталиране | средата и първата ти програма | GOROOT, GOPATH, PATH и истинските грешки при инсталирането на Go |
| 2 | Променливи, функции и типове | основните функции на revisor |
компилаторът, променливи, основни типове, функции с (resultado, error) |
| 3 | Structs, методи, грешки и интерфейси | revisor със structs и интерфейси |
structs, методи, указатели, грешките като стойности, интерфейси |
| 4 | Колекции: slices и maps | списъкът с услуги и отчетът | slices, maps, range, стабилен ред |
| 5 | Модули и тестове | истинският проект, с тестове | go mod, таблица със случаи, -race, покритие |
| 6 | Конкурентност | да проверява всичко едновременно | goroutines, канали, context, WaitGroup, семафор |
| 7 | Завършената програма | CLI, HTTP, JSON и двоичен файл | net/http, flag, encoding/json, кръстосана компилация |
Редът не е очевидният, и това е нарочно
Structs, грешките и интерфейсите идват преди slices, maps и указателите. Звучи странно — почти всички курсове слагат колекциите първи — но това не е каприз: това е редът, който използват два от курсовете по Go с най-много учещи, този на Boot.dev / freeCodeCamp (structs → интерфейси → грешки на местата 5, 6 и 7, преди slices, maps и указатели) и този на Todd McLeod в Udemy.
Причината е добра: в Go моделирането на данни и обработката на грешки Е езикът. Програма с перфектни slices и пренебрегнати грешки не е Go; тя е C с друг синтаксис.
Конкурентността е в Урок 6, а не в 3. Тя е причината Go да съществува, но ти трябват structs, грешки и интерфейси, за да не са примерите играчка. И се преподава на три минавания — goroutines, после канали, после приложена към проекта —, защото с едно минаване не се получава.
Как да го използваш
- Една сесия от 90 минути седмично или две по 45. По-малко не стига; повече от два часа наведнъж се забравя.
- 🔴 Пиши кода на ръка, винаги. Копирането и поставянето създава файлове, не знание. Пръстите ти научават неща, които очите ти не научават.
- Чупи кода нарочно. В няколко упражнения ще те помолим да предизвикаш грешка и да прочетеш какво казва компилаторът. Това не е запълване: да се научиш да четеш грешки е половината от умението да програмираш.
- Не минавай към следващия урок с отворени въпроси. Запиши ги в дневника и ги задай. Всичко, което идва, се опира на предишното.
- Всеки урок завършва с измеримо „как разбирам, че съм успял“: компилира се и минава, или не.
bitacora.mdе твой: въпроси, спъвания и онова, което те е изненадало. Той е онова, което превръща това в твой курс.
Трите източника, които си струват, в този ред
- A Tour of Go — официален, интерактивен, 2-3 ч. Изцяло, а не прелистен.
- Go by Example — всяко понятие с минимален код. Като справочник.
- Effective Go — философията. Прочети го в Урок 3, а не накрая.
⚠️ Научи стандартната библиотека преди който и да е framework. В Go стандартната стига за почти всичко и това е проектантско решение, а не недостатък. Който започне с Gin или Echo, научава framework-а, а не езика.
Кой пише това
Този курс го пише Dorian Chávez, CEO и главен консултант на Hábil, мексиканска компания за софтуерно инженерство. Инженер по компютърни системи от IPN (ESCOM), с 26 години изграждане и поддържане на системи в продукция.
Публикуваме го отворено, с лиценз Creative Commons, защото който обяснява добре, изгражда добре — и защото курс, който не може да се копира, превежда, нито подобрява, не върши много работа.
Ако намериш грешка, объркващо обяснение или цифра, която не се връзва, кажи. Този материал е направен, за да бъде поправян. Преди да публикуваме всяка версия, проверяваме, че целият код от курса работи и че онова, което показва всеки урок, е идентично с истинската програма, за да не учи нито един урок нещо, което вече се е променило.
Ако това ти е било полезно
- Искаш ли да работиш с хора, които пишат така? Пиши ни.
- Твоят екип въвежда ли Go или Rust? Също.
Уроци
- Урок 0 — Какво е Go, откъде се появи и защо си струва да го научиш
- Урок 1 — Инсталиране на Go на твоя Linux Mint и първата ти програма
- Урок 2 — Променливи, функции и типове
- Урок 3 — Structs, методи, грешки и интерфейси
- Урок 4 — Колекции: slices и maps
- Урок 5 — Модули и тестове
- Урок 6 — Конкурентност
- Урок 7 — Завършената програма