$ ▍
Преподаватель: 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)
}