День 01 · Программа, терминал, первый запуск · страница 1 из 6

Что такое программа

Сегодня вы напишете и запустите первую программу на 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