Курс по 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 е твой: въпроси, спъвания и онова, което те е изненадало. Той е онова, което превръща това в твой курс.

Трите източника, които си струват, в този ред

  1. A Tour of Go — официален, интерактивен, 2-3 ч. Изцяло, а не прелистен.
  2. Go by Example — всяко понятие с минимален код. Като справочник.
  3. Effective Go — философията. Прочети го в Урок 3, а не накрая.

⚠️ Научи стандартната библиотека преди който и да е framework. В Go стандартната стига за почти всичко и това е проектантско решение, а не недостатък. Който започне с Gin или Echo, научава framework-а, а не езика.


Кой пише това

Този курс го пише Dorian Chávez, CEO и главен консултант на Hábil, мексиканска компания за софтуерно инженерство. Инженер по компютърни системи от IPN (ESCOM), с 26 години изграждане и поддържане на системи в продукция.

Публикуваме го отворено, с лиценз Creative Commons, защото който обяснява добре, изгражда добре — и защото курс, който не може да се копира, превежда, нито подобрява, не върши много работа.

Ако намериш грешка, объркващо обяснение или цифра, която не се връзва, кажи. Този материал е направен, за да бъде поправян. Преди да публикуваме всяка версия, проверяваме, че целият код от курса работи и че онова, което показва всеки урок, е идентично с истинската програма, за да не учи нито един урок нещо, което вече се е променило.

Ако това ти е било полезно

  • Искаш ли да работиш с хора, които пишат така? Пиши ни.
  • Твоят екип въвежда ли Go или Rust? Също.

Уроци

  1. Урок 0 — Какво е Go, откъде се появи и защо си струва да го научиш
  2. Урок 1 — Инсталиране на Go на твоя Linux Mint и първата ти програма
  3. Урок 2 — Променливи, функции и типове
  4. Урок 3 — Structs, методи, грешки и интерфейси
  5. Урок 4 — Колекции: slices и maps
  6. Урок 5 — Модули и тестове
  7. Урок 6 — Конкурентност
  8. Урок 7 — Завършената програма