Содержание урока · 11 разделов
Начну с личного. Когда я впервые открыл Go после Python, первая реакция была: где всё? Нет классов, нет исключений, нет пяти способов сделать одно и то же. Вторая реакция, недели через две, — удивление, как быстро такой код собирается и как мало в нём сюрпризов на ревью. Go появился именно из раздражения: в 2007 году в Google Роб Пайк, Кен Томпсон и Роберт Гризмер устали ждать, пока соберётся большой C++ проект, и устали объяснять новому сотруднику, какой из десятка стилей писать. Публичный релиз языка состоялся в ноябре 2009-го, стабильная версия 1.0 — в марте 2012-го. С тех пор принцип не менялся: язык сознательно маленький, у него около 25 ключевых слов, и весь синтаксис реально уместить в голове. Меньше возможностей — меньше споров о вкусе — быстрее человек попадает в чужой код.
Что такое язык Go и где он работает#
Go — компилируемый язык со статической типизацией и сборкой мусора. Компилятор превращает исходники в один исполняемый файл: скопировали его на сервер — и работает, ставить виртуальную машину или интерпретатор не нужно. Отсюда характерная для экосистемы культура одного бинарника. Docker, Kubernetes, Terraform, Prometheus, Grafana, Hugo — всё это написано на Go, и это только самые громкие имена. Компаниям язык тоже доверяют: бэкенд Dropbox когда-то переехал с Python на Go ради скорости, Cloudflare держит на нём заметную часть своей инфраструктуры, Uber использует его в микросервисах. Типичная работа Go — серверная сторона: API, прокси, очереди сообщений, консольные утилиты, сетевые сервисы. Фронтенд и машинное обучение язык не захватил, и это нормально: Go честно занимает свою нишу, а не претендует на всё сразу.
Официальное имя языка — Go. Второе название, Golang, прилипло из-за домена golang.org: короткое «go» в поисковиках тонет в страницах про собак и настольные игры. В вакансиях встречаются оба варианта, в коде — только Go.
Горутины: почему бэкенд выбирает Go#
Самое знаменитое в языке — конкурентность, встроенная в сам синтаксис. Любую функцию можно запустить параллельно с остальным кодом одним словом: go download(url) — и всё, задача поехала. Такие задачи называются горутинами: они в разы легче потоков операционной системы, их стек начинается с килобайт, поэтому тысячи горутин спокойно живут в одном процессе. Вторая половина механизма — каналы, через которые горутины обмениваются данными без ручной расстановки блокировок. Сервер на Go держит множество одновременных соединений не столько потому, что язык быстрый, сколько потому, что модель «одна задача — одна горутина» не разваливается под нагрузкой. В нашем проекте этому посвящён продвинутый курс по конкурентности, а в базовом вы встретитесь с этим ближе к финалу.
Зачем учить Go: честный расклад#
Мой главный аргумент — скорость отдачи. Синтаксис языка компактный, идиомы у всех одинаковые, форматтер gofmt лишает код возможности выглядеть по-разному. Через месяц практики вы откроете почти любой публичный Go-проект и станете понимать его без переводчика. Второй аргумент — рынок: Go плотно сидит в серверной разработке и DevOps-инструментах, и вакансии там регулярно висят месяцами, потому что специалистов меньше, чем сервисов. Третий аргумент — отрицательный, и он важен. Если вы хотите фронтенд, data science или игры, Go не лучший выбор: экосистема там заметно слабее, чем у JavaScript и Python. Одно спорное место в языке — дженерики: их добавили только в версии 1.18 (2022 год), после многолетних споров, и часть опытных разработчиков до сих пор сознательно ими почти не пользуется. Кому-то это недостаток, кому-то признак вкуса — но готовьтесь, что в Go даже споры короткие.
Где Go силён, а где нет#
| Область | Позиция Go | Причина |
|---|---|---|
| Бэкенд и API | одна из первых | скорость, конкурентность, один бинарник |
| DevOps-инструменты | фактический стандарт | Docker, Kubernetes, Terraform — всё Go |
| CLI-утилиты | отлично | быстрая сборка и кросс-компиляция |
| Фронтенд | не его территория | в браузере Go не работает |
| Data science | слабее Python | экосистема pandas и NumPy вне конкуренции |
| Игры и GUI | возможно, но редко | библиотеки есть, индустрия в другом лагере |
Слабые стороны, о которых вакансии не говорят#
- Многословная обработка ошибок: конструкция if err != nil встречается в коде постоянно, и к ней надо привыкнуть.
- Никаких исключений: ошибки — обычные значения, паника существует, но для аварийных сценариев.
- Компилятор строг: неиспользованная переменная или импорт не даст собрать программу. Сначала бесит, потом спасает.
- Дженерики появились поздно, и стиль их использования в сообществе ещё не устоялся.
Как устроен курс go-basics#
Курс — 25 уроков от этого вступления до консольного менеджера заметок в финале. Каждый урок собран по одной схеме: сначала теория с примерами, затем интерактивы — тесты, задачи «что выведет код», сборка программы по строкам и редактор с кнопкой «Запустить». Редактор — это настоящий интерпретатор Go внутри вашего браузера: код выполняется локально на вашей машине, без сервера и без регистрации. Из этого следует главная рекомендация ко всему курсу: не читайте уроки как статью. Запускайте каждый пример, ломайте его, меняйте строки и смотрите, что произойдёт. Красное сообщение об ошибке — не провал, а самый быстрый способ понять границы языка. Очки и уровень в правом верхнем углу — не украшение: за пройденный урок, верный ответ и запуск кода начисляется XP, это помогает не бросить на середине.
Хотите проверить идею между уроками — откройте песочницу: тот же интерпретатор без теории. Ссылка есть и в шапке сайта.
Кому этот курс подойдёт#
Сюда приходят по трём сценариям. Первый: вы никогда не программировали и выбираете первый язык — тогда берите уроки медленно, по одному в день-два, и не пропускайте задания, привычка запускать код дороже скорости чтения. Второй: вы знаете Python, JavaScript или PHP и хотите быстро расшириться на серверную разработку — вам можно смелее перематывать базовые главы, но интерактивы всё равно проходите, у Go хватает собственных привычек. Третий сценарий: вы готовитесь к собеседованию и хотите освежить синтаксис с практикой — тогда вам полезнее будет и сборник шпаргалок рядом с уроками. В любом из трёх случаев установка Go на свою машину не обязательна до самого конца базового курса, но, если уже хотите работать локально, следующий урок целиком про это.
Первая программа — прямо сейчас
Нажмите «Запустить» и посмотрите вывод. Потом поменяйте текст в кавычках и запустите снова, затем замените 2+2 на своё выражение. Ничего не сломается: ошибка в песочнице — это сообщение, а не катастрофа.
Запустите код, чтобы увидеть вывод.
Разбираем пример построчно#
Три конструкции из примера — скелет любой программы на Go, и к третьему уроку вы будете читать его на автомате. Строка package main объявляет пакет: файлы с main-пакетом компилируются в исполняемую программу, а не в библиотеку. Строка import "fmt" подключает пакет стандартной библиотеки, который умеет печатать текст в консоль — без него функция Println просто не существует. Функция func main() — точка входа: выполнение любой программы начинается именно с неё, и без неё код не соберётся вовсе. Обратите внимание на фигурные скобки: открывающая стоит на той же строке, что и объявление, и это не вкусовщина — компилятор требует. Подробный разбор каждого слоя ждёт вас в уроке Структура программы: package, import, func main, там же объясним, почему в Go не ставят точки с запятой.
На каком языке написаны Docker и Kubernetes?
Сколько примерно ключевых слов в языке Go?
Термины урока
Это первое заблуждение новичков, и оно дорого стоит. Синтаксис Go маленький, но сложность из программирования никуда не делась: она переехала из синтаксиса в дизайн систем — как разрезать сервис на части и как гонять данные между горутинами. Простота языка — инструмент, а не потолок.
Песочница урока
Редактируйте код и запускайте его прямо здесь — интерпретатор работает в браузере, ничего устанавливать не нужно. За каждый запуск — +2 XP.
Запустите код, чтобы увидеть вывод.
Коротко: что запомнить
- Go — компилируемый язык из Google (публичный релиз в 2009-м) для серверной разработки, CLI и инфраструктуры.
- Docker, Kubernetes, Terraform написаны на Go — в DevOps-инструментах язык фактически стандарт.
- Главные фишки: горутины и каналы в ядре языка, сборка в один бинарник, быстрая компиляция.
- Синтаксис компактный: около 25 ключевых слов, весь язык реально выучить целиком.
- Слабые стороны тоже настоящие: if err != nil, отсутствие исключений, суровый компилятор.
- Курс go-basics: 25 уроков, код запускается в браузере без установки Go и без регистрации.
- Не читайте пассивно: запускайте, ломайте и правьте каждый пример.
Домашнее задание
Запустите код из интерактива урока. Затем добавьте четвёртую строку вывода со своим именем и запустите ещё раз. После этого удалите строку import "fmt" и запустите — внимательно прочитайте сообщение об ошибке, верните импорт на место и убедитесь, что всё снова работает. Цель — привыкнуть, что красный текст это часть обучения, а не сигнал бросить.
Личные заметкиПусто
Вопросы и ответы по уроку
Go и Golang — это одно и то же?
Да. Официальное имя языка — Go, а Golang закрепился из-за адреса сайта golang.org и поисковых запросов. В вакансиях и резюме встречаются оба варианта.
Сложно ли выучить Go, если я никогда не программировал?
Go часто называют хорошим первым языком: строгая типизация ловит ошибки рано, синтаксис маленький, а интерактивная песочница позволяет писать код с первого урока — без установки инструментов.
Сколько времени займёт курс go-basics?
Ориентир — около 12 часов: 25 уроков по 15–30 минут плюс практика. Удобный темп — один урок в день, тогда курс закрывается за месяц без надрыва.
Термины урока
Ключевые понятия из этого урока — короткие определения в глоссарии. Наведите на термин, чтобы вспомнить, откройте карточку для подробностей и ссылки на практику.
Изучайте дальше
Следующая ступень учебного пути
Продвинутые возможности Go: от замыканий до рефлексии
Продвинутый курс Go: замыкания, defer, горутины, каналы, контекст, интерфейсы, дженерики, рефлексия, тесты и JSON. 25 уроков с практикой в браузере.
- Писать и читать конкурентный код: go-функции, каналы, select
- Управлять жизненным циклом операций через context
- Проектировать API на интерфейсах
- Использовать дженерики без злоупотребления