Что такое программа
Сегодня вы напишете и запустите первую программу на Go. По дороге разберёмся, что происходит между «написал текст» и «на экране появился результат», научимся ходить по папкам в терминале и читать сообщения об ошибках — их вы будете видеть чаще, чем результат.
Компьютер умеет очень мало
Процессор выполняет простые действия: сложить два числа, сравнить их, записать число в ячейку памяти, прочитать из ячейки, перейти к другому действию. Зато миллиарды раз в секунду. Всё остальное — окно браузера, видео, оформление заказа в интернет-магазине — собрано из этих шагов.
Программа — список таких шагов, записанный заранее. Компьютер выполняет его по порядку, сверху вниз, пока список не кончится.
Писать прямо командами процессора неудобно: для человека они выглядят как длинные ряды чисел, и у разных процессоров они разные. Поэтому программы пишут на языке программирования — в виде текста, который человек читает, а специальная программа переводит в команды процессора.
Исходный код, компилятор, исполняемый файл
Три слова, которые дальше будут встречаться каждый день:
| Слово | Что это | Пример сегодня |
|---|---|---|
| Исходный код | текст программы на языке программирования — обычный текстовый файл | main.go |
| Компилятор | программа, которая переводит исходный код в команды процессора | команда go build |
| Исполняемый файл | результат перевода: файл с командами процессора, его можно запустить | файл hello |
Путь от текста до результата:
main.go ── компилятор ──▶ hello ── запуск ──▶ Привет, мир!
(текст) (команды (результат
процессора) на экране)Go — компилируемый язык: перед запуском программа переводится целиком. Если в тексте ошибка, компилятор откажется переводить и напишет, в какой строке она. Программа с ошибкой в тексте не запустится вообще — ни одна её строка не выполнится.
Поначалу это кажется придирчивостью. На деле строгость работает на вас: опечатку находит компилятор за секунду, а не пользователь через неделю.
Почему Go
Go придумали в 2009 году для программ, которые работают на серверах: принимают запросы, ходят в базы данных, считают и отвечают. На нём написаны Docker и Kubernetes, на нём работают внутренние сервисы маркетплейсов, банков и облачных платформ.
Для первого языка у Go два полезных свойства:
- Он маленький. Конструкций в языке мало, и у задачи обычно один очевидный способ записи. Меньше учить — проще читать чужой код.
- Он строгий. Неиспользуемая переменная, лишний подключённый пакет, сложение числа с текстом — ошибки компиляции. Небрежность не проходит незамеченной.
Как устроен курс
Первые 35 дней — сам язык и основы программирования. Задачи в них из одной области: склад, заказы, цены, доставка. С 36-го дня вы работаете в готовом сервисе заказов, как новый сотрудник в команде: чините ошибки, добавляете возможности, проверяете чужой код.
Каждый день устроен одинаково:
| Что | Команда |
|---|---|
| читать страницы по порядку | course start 01, дальше course next |
| оглавление дня | course toc 01 |
| пробовать сразу | блоки «Попробуйте сейчас» — сразу после раздела |
| итоговые задания | course lab 01 |
| проверить себя | course check 01 |
| подсказка, если застряли | course hint 01 ID — ID напечатает проверка |
| контрольные вопросы | course quiz 01 — в самом конце |
Проверка смотрит и на команды
Часть пунктов проверки сверяет не файлы, а то, какие команды вы выполняли. Такие пункты начинаются с t_: t_goversion — «спрашивали версию Go», t_gorun — «запускали программу через go run», t_build — «собирали программу». Смысл простой: результат можно получить разными путями, а курс учит именно пути.
Выполненные команды пишутся в журнал — обычный текстовый файл ~/.course/cmdlog. Журнал ведёт не сам тренажёр: его включает один раз маленькая надстройка над оболочкой, которую ставит команда course setup-shell. В дне 0 вы её уже выполняли (раздел 7.4).
| Команда | Что делает |
|---|---|
cat ~/.course/cmdlog |
показать журнал; он лежит в домашней папке (~ — её краткая запись, о ней на следующей странице) |
course setup-shell |
включить запись команд, если она не включена |
source ~/.bashrc |
применить включение в уже открытом терминале |
Если пункт t_… красный, а работа сделана, причина почти всегда одна: журнал не включён или включён уже после того, как команды выполнялись. Тогда выполните course setup-shell, потом source ~/.bashrc — и повторите нужную команду: пункт засчитается. Команды из окна терминала в VS Code тоже считаются, это тот же bash.
Правило двадцати минут. Застряли — двадцать минут пробуете сами: перечитываете раздел, запускаете, читаете ошибку. Потом берёте подсказку. Первая подсказка — направление, вторая — конкретнее, третья — готовое решение. Третья попадает в отчёт: тема, пройденная по готовому решению, обычно всплывает на контрольной точке.
Что может пойти не так
| Что видите | Что это значит | Что делать |
|---|---|---|
course: command not found |
тренажёр не установлен или установлен не туда | вернуться к дню 0, раздел про установку тренажёра |
go: command not found |
Go не поставлен или терминал открыт до установки | course doctor покажет, чего не хватает; после prepare.sh закрыть и открыть терминал |
course doctor пишет Go: go1.26…, а курс рассчитан на go1.27.1 |
стоит другой Go, например из Центра приложений | повторить sudo bash /opt/course/docs/setup/prepare.sh |
Если программа установлена, но терминал её не находит, Ubuntu печатает перед command not found ещё две строки: Command 'go' is available in '/usr/local/bin/go' и что папки /usr/local/bin нет в PATH. Лечится тем же: закрыть и открыть терминал.
Попробуйте сейчас: спросите версию Go.
Цель: компилятор Go отвечает в терминале и называет свою версию.
1. Откройте терминал: сочетание
Ctrl+Alt+Tили «Терминал» в меню приложений. В окне мигает курсор после строки, которая кончается знаком$.2. Напечатайте и нажмите
Enter:▶ Выполнитеgo versionОтвет:
Вывод · это печатает программа, набирать не нужноgo version go1.27.1 linux/amd64Это компилятор Go сообщил свою версию. Его поставил скрипт подготовки в день 0. В виртуальной машине на Mac с чипом M в конце будет
linux/arm64— это нормально: система внутри всё равно Linux, аarm64— название процессора.Если вместо ответа
go: command not found— день 0 не закончен. Выполнитеcourse doctor: он покажет, чего не хватает.Готово, когда: терминал ответил строкой
go version go1.27.1 …(пункт проверкиt_goversion).
Дальше: терминал — course next