День 0 · установка · ide.md

Настройка рабочего места: 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

  1. Ctrl+Shift+X.
  2. В поиске напечатайте Go.
  3. Выберите расширение Go, автор — Go Team at Google. Похожих расширений с другими авторами много, нужно это.
  4. Install.

То же самое из терминала:

▶ Выполните
code --install-extension golang.go
Вывод · это печатает программа, набирать не нужно
Installing extension 'golang.go'...
Extension 'golang.go' v0.56.1 was successfully installed.

Если расширение предлагает установить инструменты (Install All, Install gopls и т. п.) — закройте уведомление, ничего не ставьте. Инструменты уже стоят, на шаге 5 мы покажем редактору, где они лежат. Иначе он скачает свои версии, и они разойдутся с версиями тренажёра.


Шаг 5. Настройки

Настройки VS Code — это файл в формате JSON. Впишем их целиком, а ниже разберём каждую строку.

  1. Ctrl+Shift+P.
  2. Напечатайте Open User Settings (JSON) и выберите эту команду. Именно с (JSON) — без неё откроется окно с галочками.
  3. Откроется файл 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
  }
}
  1. 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 расставляет само, это отдельная настройка, её мы не трогаем.

  1. Перезапустите окно: 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.go
package 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.

Что увидите:

Кнопка Клавиша Что делает
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 на месте