$ ▍
Викладач: Daniel academyпочатковийGo
Цей курс для тих, хто починає Go: байдуже, перша це мова чи просто перша компільована. Не передбачається нічого, крім готовності чути, що ти неправий, бо компілятор казатиме тобі це постійно, і навчитися читати його слова це половина вміння писати на Go. П'ять модулів, двадцять вісім уроків, тринадцять із них перевіряються просто в браузері. Починаєш із програми, яка друкує і читає, та з правил, яких Go вимагає до збирання: кожна змінна використана, кожен імпорт використаний, форматування не обговорюється. Далі типи, де Go відмовляється вгадувати: int і float64 не змішуються, доки ти сам не скажеш, а рядок це байти, навіть коли виглядає літерами. Другий модуль вирішує, клацне в тебе Go чи ні. Масив це значення і копіюється, зріз це вид на масив і не копіюється, мапа лишається nil, доки її не створили, а метод на значенні змінює копію і тихо не змінює нічого. Кожен баг, після якого новачок каже, що Go дивний, живе в цьому абзаці, тому на нього йде три уроки і три задачі, а не рамка з попередженням. Потім функції, які повертають свої помилки, а не кидають їх: на цій звичці тримається вся решта мови. Ти загортаєш помилку через %w, розгортаєш через errors.Is та errors.As, а одразу за цим зустрічаєш інтерфейси, бо error це теж інтерфейс, і на той момент він читається як звичайний код. Інтерфейси тут маленькі й неявні: жодного implements, жодної ієрархії, просто тип, у якого трапилися потрібні методи. Останній модуль це те, заради чого багато хто й прийшов. Горутини і канали, WaitGroup, select, буферизовані й небуферизовані, і дедлок як звичайна річ, яку читають і лагодять, а не катастрофа. Закінчуєш пайплайном, де стадії розмовляють через канали і коректно їх закривають: на цю форму схоже напрочуд багато справжнього Go. Тепер чесна частина. Тренажер збирає твій код на Go 1.26.5 у пісочниці без мережі й без модулів: один файл main.go і стандартна бібліотека. Жодну задачу тут не можна розв'язати, підключивши залежність, і на цьому рівні в цьому й сенс. Три речі, яких пісочниця не може, розібрано як команди для твоєї власної машини, з точними рядками запуску, а не імітацією: детектор гонок, go test і рознесення програми по файлах. Go, якого тут навчають, це той Go, яким пишуть зараз, і це важливіше, ніж здається. Лічильні цикли це range по цілому числу. Змінна циклу своя на кожній ітерації, тому стару пораду обов'язково передавати її аргументом у горутину спершу пояснюють, а потім відправляють на пенсію. Сортування це пакет slices. Якщо ти читав старі туторіали, курс каже, які їхні попередження спливли і коли. Курс безкоштовний, і це вхід до Go-треку платформи.
5 модулів · 28 уроків
Фрагмент фінального проєкту курсу. Кожен випускник пише цей код власноруч.
func squares(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in {
out <- n * n
}
}()
return out
}
for v := range squares(source) {
fmt.Println(v)
}