Настройка рабочего места: Go и VS Code
Делается в день 0, после того как тренажёр установлен и выполнен sudo bash /opt/course/docs/setup/prepare.sh. Занимает около часа.
Итог: в виртуальной машине стоят Go и редактор VS Code. Редактор подсвечивает ошибки прямо в коде, сам расставляет отступы, запускает программу и тесты и умеет останавливать программу на нужной строке, чтобы вы посмотрели, что у неё внутри.
Что такое IDE и зачем она новичку
Программа — это обычный текстовый файл. Написать её можно хоть в блокноте, а запустить — командой в терминале. IDE (среда разработки) — редактор, который понимает язык и помогает с тремя вещами:
- Ошибки видны сразу. Опечатку подчеркнёт красным, пока вы печатаете, а не при запуске.
- Код можно исследовать. Клик по имени функции переносит туда, где она написана. В чужом коде из сотен файлов без этого не обойтись.
- Программу можно остановить. Отладчик замораживает её на выбранной строке и показывает значения всех переменных.
Мы берём VS Code с официальным расширением Go от команды языка. Им пользуется больше всего Go-разработчиков, и почти все инструкции в интернете написаны для него.
Шаг 1. Проверить Go и инструменты
Их поставил prepare.sh. Откройте терминал (Ctrl+Alt+T) и выполните:
go versionЧто увидите:
go version go1.27.1 linux/amd64В виртуальной машине на Mac с чипом M в конце будет linux/arm64 (система внутри всё равно Linux, arm64 — название процессора). Дальше:
gopls version
dlv version
golangci-lint versionЧто увидите:
golang.org/x/tools/gopls v0.23.0
Delve Debugger
Version: 1.27.2
Build: $Id: 360e7b2181d3da54115aaee4f569954bca95cfe3 $
golangci-lint has version 2.13.2 built with go1.27.0 from 27774aaf on 2026-08-27T23:01:12Z| Программа | Что делает |
|---|---|
go |
компилятор и всё остальное: запуск, тесты, зависимости |
gopls |
«языковой сервер» — это он подсказывает и подчёркивает ошибки в редакторе |
dlv |
отладчик: останавливает программу на строке |
golangci-lint |
линтер: проверяет код на типичные ошибки, как это делает CI в команде |
built with go1.27.0 у линтера — нормально: он собран авторами на первой версии 1.27 и работает с любой 1.27.
Если go version показывает не 1.27.1 или command not found — не ставьте Go через Центр приложений, apt или snap: там другая версия, и тренажёр будет спорить с редактором. Повторите prepare.sh и загляните в таблицу в конце.
Шаг 2. Установить VS Code
2.1. Скачайте пакет
В виртуальной машине откройте браузер и зайдите на https://code.visualstudio.com/download. Нажмите кнопку .deb под значком Debian/Ubuntu. Файл вида code_1.137.0-…_amd64.deb размером около 230 МБ сохранится в Загрузки.
Нужен именно .deb. Не ставьте VS Code из Центра приложений Ubuntu: там он в формате snap, а snap-версия путает окружение программ, которые вы запускаете из редактора, и не видит Go.
2.2. Установите
cd ~/Downloads
sudo apt install ./code_*_amd64.debТочка и косая черта перед именем файла обязательны: без них apt ищет пакет в интернете, а не в текущей папке.
В середине установки терминал может показать синее окно с вопросом, добавить ли репозиторий Microsoft. Стрелками выберите Yes и нажмите Enter — так VS Code будет получать обновления.
В конце — строки Processing triggers for … и снова приглашение терминала.
2.3. Проверьте
code --versionЧто увидите — три строки: версия, длинный хеш, архитектура:
1.137.0
645f29cc3176500b4b5762ba887cf2a7f0ffdf2c
x64Номер версии у вас может быть новее — это не страшно.
Шаг 3. Первый запуск и язык интерфейса
Запустите VS Code из меню приложений или командой code.
Интерфейс оставляем на английском. Редактор предложит русский языковой пакет — откажитесь. Сообщения Go, отладчика и линтера всё равно на английском, а в документации, на форумах и в подсказках курса команды называются по-английски. С переведённым меню вы будете искать «Палитру команд», а везде написано Command Palette.
Из чего состоит окно:
| Где | Что это | Как открыть |
|---|---|---|
| Слева, верхний значок | Explorer — файлы открытой папки | Ctrl+Shift+E |
| Слева, лупа | Search — поиск по всем файлам | Ctrl+Shift+F |
| Слева, квадраты | Extensions — расширения | Ctrl+Shift+X |
| Слева, треугольник с жуком | Run and Debug — отладка | Ctrl+Shift+D |
| Слева, колба | Testing — список тестов | — |
| Снизу | Terminal — тот же терминал, что в системе | Ctrl+` |
| Снизу, вкладка рядом | Problems — все ошибки списком | Ctrl+Shift+M |
| Вверху по команде | Command Palette — любая команда редактора по названию | Ctrl+Shift+P |
Command Palette — главное. Не помните, где кнопка, — нажмите Ctrl+Shift+P и начните печатать, что нужно: format, test, go:.
Шаг 4. Расширение Go
Ctrl+Shift+X.- В поиске напечатайте
Go. - Выберите расширение Go, автор — Go Team at Google. Похожих расширений с другими авторами много, нужно это.
- Install.
То же самое из терминала:
code --install-extension golang.goInstalling extension 'golang.go'...
Extension 'golang.go' v0.56.1 was successfully installed.Если расширение предлагает установить инструменты (Install All, Install gopls и т. п.) — закройте уведомление, ничего не ставьте. Инструменты уже стоят, на шаге 5 мы покажем редактору, где они лежат. Иначе он скачает свои версии, и они разойдутся с версиями тренажёра.
Шаг 5. Настройки
Настройки VS Code — это файл в формате JSON. Впишем их целиком, а ниже разберём каждую строку.
Ctrl+Shift+P.- Напечатайте
Open User Settings (JSON)и выберите эту команду. Именно с (JSON) — без неё откроется окно с галочками. - Откроется файл
settings.json. Если в нём уже что-то есть — удалите всё и вставьте:
settings.json{
"files.autoSave": "onFocusChange",
"telemetry.telemetryLevel": "off",
"extensions.autoUpdate": false,
"go.alternateTools": {
"go": "/usr/local/go/bin/go",
"gopls": "/usr/local/bin/gopls",
"dlv": "/usr/local/bin/dlv"
},
"go.toolsManagement.autoUpdate": false,
"go.toolsManagement.checkForUpdates": "local",
"go.diagnostic.vulncheck": "Off",
"go.lintTool": "golangci-lint-v2",
"go.lintFlags": ["--path-mode=abs", "--fast-only"],
"go.lintOnSave": "package",
"go.testFlags": ["-count=1", "-v"],
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.codeActionsOnSave": {
"source.organizeImports": "never"
}
},
"gopls": {
"ui.semanticTokens": true
}
}Ctrl+S.
| Настройка | Зачем |
|---|---|
files.autoSave: onFocusChange |
файл сохраняется, когда вы переходите в терминал или другое окно. Главная ошибка новичка — запустить программу, забыв сохранить, и полчаса искать, почему ничего не изменилось |
telemetry.telemetryLevel: off |
редактор не отправляет статистику |
extensions.autoUpdate: false |
расширения не обновляются сами посреди курса |
go.alternateTools |
где лежат Go, языковой сервер и отладчик. Без этого редактор, запущенный из меню, может не найти Go |
go.toolsManagement.* |
не предлагать скачивать и обновлять инструменты |
go.diagnostic.vulncheck: Off |
не проверять зависимости по базе уязвимостей в интернете при каждом открытии |
go.lintTool, go.lintFlags, go.lintOnSave |
при сохранении запускать golangci-lint — тот же линтер, что появится в тренажёре во второй половине курса. --fast-only — только быстрые проверки, чтобы редактор не подвисал |
go.testFlags |
-count=1 — не брать результат тестов из кеша; -v — показывать имена тестов и их вывод |
[go] → editor.defaultFormatter |
форматирует Go-код расширение Go, а не что-то ещё |
[go] → source.organizeImports: never |
при сохранении редактор не правит строки import сам. Без этого Ctrl+S молча добавляет и удаляет пакеты — и ошибки про пакеты, которые курс учит читать и чинить, исчезают раньше, чем вы их увидели |
gopls → ui.semanticTokens |
точнее подсветка: типы, функции и переменные разными цветами |
Отступы и пробелы при сохранении расширение Go расставляет само, это отдельная настройка, её мы не трогаем.
- Перезапустите окно:
Ctrl+Shift+P→Developer: Reload Window.
Шаг 6. Проверка на живой программе
6.1. Создайте модуль
Программа на Go живёт в модуле — папке с файлом go.mod. Учебные модули дней создаёт тренажёр; для проверки редактора сделаем свой:
mkdir -p ~/gocourse/idecheck
cd ~/gocourse/idecheck
go mod init idecheckЧто увидите:
go: creating new go.mod: module idecheck
go: to add module requirements and sums:
go mod tidyПоследние две строки — совет на будущее, когда в модуле появятся зависимости. Сейчас их нет, ничего делать не нужно.
Откройте папку в редакторе:
code .Открывайте папку, а не отдельный файл. Редактор понимает Go-код только внутри модуля: открытый сам по себе main.go он не свяжет с go.mod, и половина подсказок пропадёт. Правило на весь курс: File → Open Folder → папка, где лежит go.mod.
6.2. Доверие к папке
Первый раз VS Code спросит, доверяете ли вы авторам файлов в этой папке (Do you trust the authors of the files in this folder?). Нажмите Yes, I trust the authors. Если выбрать «нет», редактор откроет папку в ограниченном режиме (Restricted Mode) и отключит расширения — Go перестанет подсказывать.
6.3. Первая программа
В Explorer нажмите значок New File рядом с именем папки, назовите файл main.go и напечатайте:
~/gocourse/idecheck/main.gopackage main
import "fmt"
func main() {
name := "мир"
fmt.Println("Привет,", name)
}Переключитесь в терминал внизу (Ctrl+` ) — файл сохранится сам. Запустите:
go run .Привет, мир6.4. Форматирование
Сотрите отступ перед fmt.Println, чтобы строка прилипла к левому краю, и нажмите Ctrl+S. Отступ вернулся сам.
6.5. Ошибка до запуска
Добавьте в main строку:
~/gocourse/idecheck/main.go count := 5Через секунду count подчеркнётся красным. Наведите мышь — появится текст:
declared and not used: countЭто тот же текст, который напечатал бы компилятор при go run .. Все ошибки проекта списком — вкладка Problems (Ctrl+Shift+M). Удалите строку, подчёркивание исчезнет.
6.6. Отладчик
Щёлкните слева от номера строки с fmt.Println — появится красная точка. Это точка останова (F9 ставит и убирает её на текущей строке).
Нажмите F5. Если редактор спросит, какой отладчик взять, выберите Go.
Что увидите:
- строка с точкой подсветится — программа остановилась перед ней;
- слева в панели Variables —
name = "мир"; - сверху — маленькая панель кнопок отладки.
| Кнопка | Клавиша | Что делает |
|---|---|---|
| Continue | F5 |
выполнять дальше до следующей точки |
| Step Over | F10 |
выполнить текущую строку целиком |
| Step Into | F11 |
зайти внутрь вызываемой функции |
| Step Out | Shift+F11 |
досчитать текущую функцию и вернуться |
| Stop | Shift+F5 |
остановить программу |
Нажмите F10 — во вкладке Debug Console появится Привет, мир. Shift+F5 — отладка закончена. Подробно отладчик разбирается в день 09.
Всё работает — настройка закончена. Папку ~/gocourse/idecheck можно удалить.
Клавиши, которые понадобятся с первого дня
| Действие | Клавиши |
|---|---|
| Палитра команд | Ctrl+Shift+P |
| Открыть файл по имени | Ctrl+P |
| Терминал | Ctrl+` |
| Сохранить | Ctrl+S |
| Перейти к определению | F12 или Ctrl+клик |
| Где используется | Shift+F12 |
| Переименовать везде | F2 |
| Поиск по всем файлам | Ctrl+Shift+F |
| Закомментировать строку | Ctrl+/ |
| Список ошибок | Ctrl+Shift+M |
| Запустить отладку | F5 |
| Точка останова | F9 |
Терминал или кнопки
Кнопки редактора удобны, но команды, которые просят в задании, выполняйте в терминале — во встроенном или обычном. Тренажёр видит команды, набранные в терминале, и учитывает их при проверке. Нажатия кнопок в редакторе он не видит.
Если что-то не так
Сверху — то, что случается чаще всего. Сначала скопируйте точный текст сообщения: по пересказу проблема не узнаётся.
| Что видите | Что это значит | Что делать |
|---|---|---|
Уведомление Failed to find the "go" binary in either GOROOT(...) or PATH(...) |
редактор не нашёл Go | в терминале ls -l /usr/local/go/bin/go; путь в go.alternateTools в settings.json; Developer: Reload Window |
Изменили код, а go run печатает старое |
файл не сохранён: на вкладке файла белая точка вместо крестика | Ctrl+S; проверьте files.autoSave в настройках |
No packages found for open file ... или No active builds contain ... |
открыт файл или папка вне модуля | File → Open Folder → папка, где лежит go.mod |
go: go.mod file not found in current directory or any parent directory; see 'go help modules' |
команда запущена не в папке модуля | pwd — где вы; cd в папку с go.mod |
| Внизу надпись Restricted Mode, подсказок нет | папке не доверили | Ctrl+Shift+P → Workspaces: Manage Workspace Trust → Trust |
The "gopls" command is not available |
редактор не нашёл языковой сервер | ls -l /usr/local/bin/gopls; путь в go.alternateTools; Reload Window. Кнопку Install не нажимайте |
Cannot find the alternate tool ... configured for gopls |
опечатка в пути в settings.json |
сравните путь с выводом ls -l |
go.mod requires go >= ... (running go 1.26...) |
запускается чужой Go из apt |
which go должно показать /usr/local/bin/go; установленный пакет Go из apt удалите: sudo apt remove 'golang*' |
| Программа ждёт ввода, а в отладке ввести некуда | Debug Console не передаёт ввод программе | программы с вводом запускайте в терминале: go run .. Отладка программ с вводом — в день 09 |
Уведомление A new version of gopls ... is available |
редактор нашёл свежую версию | закройте уведомление, ничего не обновляйте |
| Код не форматируется при сохранении | форматирование перехватило другое расширение | проверьте в settings.json блок "[go]" с golang.go |
Could not attach to pid ...: ... ptrace_scope |
в Ubuntu запрещено подключаться отладчиком к уже запущенной программе | запускайте программу из отладчика (F5), а не подключайтесь к ней |
go: -race requires cgo |
в системе нет компилятора C | повторите prepare.sh: он ставит gcc |
VS Code из Центра приложений: Failed to run '/snap/bin/go env' |
стоит snap-версия | sudo snap remove code, поставьте .deb по шагу 2 |
| Магазин расширений не открывается | нет доступа к магазину из вашей сети | опишите проблему по форме ниже |
Проверка «что вообще настроено»
Ctrl+Shift+P → Go: Locate Configured Go Tools. Во вкладке Output появится отчёт: какой Go, где gopls и dlv, в каком модуле вы находитесь. Приложите его к вопросу.
Форма вопроса
| Что написать | Пример |
|---|---|
| Шаг: | 6.6, отладчик |
| Что сделал: | поставил точку на строке 7, нажал F5 |
| Что ожидал: | остановку на строке 7 |
| Что получил: | точный текст ошибки целиком |
| go version: | вывод go version |
| Locate Tools: | вывод Go: Locate Configured Go Tools |
| Что уже проверил: | папка открыта через Open Folder, go.mod на месте |