Для настройки Go в VS Code установите Go SDK и официальное расширение Go, откройте папку модуля и проверьте инструменты gopls и Delve. SDK собирает и запускает код, gopls обеспечивает анализ в редакторе, а Delve нужен для отладки.
Создадим маленькое приложение с тестами. Если у вас уже есть проект с go.mod, не запускайте в нём повторную инициализацию и не заменяйте требования к версии языка настройками из учебного примера.
Установите Go SDK
Выберите пакет своей ОС на официальной странице установки Go. Для существующего проекта сначала проверьте директивы go и, если она есть, toolchain в go.mod, а также требования README.
После установки перезапустите VS Code и выполните в терминале:
go version
go env GOROOT GOPATH
Не задавайте GOROOT вручную без конкретной необходимости: обычная установка определяет расположение SDK. Если go не найден, проверьте PATH и путь исполняемого файла через where.exe go в Windows или command -v go в macOS/Linux.
Устанавливать SDK ради VS Code отдельно от SDK терминала не нужно. Важно, чтобы расширение и команды проекта использовали совместимые инструменты, а не случайные разные установки.
Установите расширение и инструменты редактора
В Extensions найдите Go, идентификатор golang.Go, официальный проект команды Go. Откройте файл .go, чтобы расширение активировалось. Если оно предлагает установить недостающие инструменты, проверьте список и подтвердите необходимые компоненты.
В палитре доступна команда Go: Install/Update Tools. Для базового сценария важны gopls и dlv. Не обновляйте инструменты вслепую, если поддерживаете старую версию Go: у расширения и language server есть политика совместимости. Назначение компонентов и поддерживаемые версии указаны в репозитории vscode-go.
gopls и компилятор решают разные задачи. Если подсказки исчезли, это не обязательно мешает go build. И наоборот: красивая подсветка не доказывает успешную сборку.
Создайте первый Go-модуль
Создайте папку go-start, откройте её через File → Open Folder и выполните:
go mod init example.com/go-start
example.com/go-start здесь является учебным путём модуля. Для локального примера регистрировать этот домен или создавать удалённый репозиторий не нужно. Путь определяет пространство импортов, а не обязательное подключение к серверу на этом шаге.
В режиме модулей проект не обязан находиться внутри GOPATH/src. Основной ориентир для этого примера: в корне открытой папки находится go.mod. Создание модуля и запуск программы разобраны в Getting started with Go.
Создайте main.go:
package main
import "fmt"
func totalPrice(price, quantity int) int {
return price * quantity
}
func main() {
total := totalPrice(350, 3)
fmt.Printf("Total: %dn", total)
}
Запустите из корня проекта:
go run .
go build .
Первая команда должна вывести Total: 1050. Вторая создаёт исполняемый файл пакета main; отсутствие ошибок важнее наличия подробного сообщения в терминале. Точка в командах означает текущий пакет, поэтому запуск из другой папки может дать другой результат.
Настройте форматирование
В .vscode/settings.json добавьте:
{
"[go]": {
"editor.defaultFormatter": "golang.Go",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
Для проверки измените отступы в main.go и явно сохраните файл. Форматирование Go не следует перекладывать на Prettier-конфигурацию JavaScript. Если задан глобальный форматтер, языковой блок помогает выбрать подходящий инструмент для .go.
Оформление кода и организация импортов являются разными операциями. Если расширение не предлагает импорт, проверьте состояние gopls, корень модуля и возможность найти зависимость. Не добавляйте случайные пути в GOPATH для подавления сообщения редактора. Список функций и настроек можно найти в документации Go для VS Code.
Добавьте тесты
Рядом с main.go создайте main_test.go:
package main
import "testing"
func TestTotalPrice(t *testing.T) {
if got := totalPrice(350, 3); got != 1050 {
t.Fatalf("totalPrice = %d, want 1050", got)
}
}
func TestZeroQuantity(t *testing.T) {
if got := totalPrice(350, 0); got != 0 {
t.Fatalf("totalPrice = %d, want 0", got)
}
}
Выполните:
go test ./...
go vet ./...
Ожидаются успешные тесты и отсутствие диагностик go vet для этого примера. Шаблон ./... распространяет команду на пакеты текущего дерева. Имена тестов начинаются с Test, а файлы заканчиваются на _test.go. Основы тестирования объясняет официальное руководство Add a test.
Для контроля актуального результата при подозрении на кэш можно выполнить go test -count=1 ./.... Не воспринимайте go vet как доказательство отсутствия ошибок: это дополнительная статическая проверка, а не замена тестам поведения.
Настройте отладчик Delve
Создайте .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Go: current module",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"cwd": "${workspaceFolder}"
}
]
}
Для данного проекта пакет main лежит в корне. Если у реального приложения входная точка в cmd/server, измените program на эту папку, а рабочий каталог выбирайте с учётом файлов конфигурации приложения.
Поставьте точку останова внутри totalPrice, нажмите F5 и посмотрите аргументы. Если не найден dlv, установите Delve через Go: Install/Update Tools. Не заменяйте его отладчиком C++: для Go используется другой адаптер. Варианты конфигурации описаны в официальном руководстве vscode-go по отладке.
Как разбирать проблемы окружения
Выполните из папки проекта:
go env GOMOD GOWORK
Для простого проекта GOMOD должен указывать на его go.mod. GOWORK помогает заметить влияние workspace-файла, если вы работаете с несколькими модулями. Для однопроектного примера специально создавать go.work не нужно.
| Симптом | Первая проверка |
|---|---|
go.mod file not found |
Открыта ли папка модуля, откуда выполняется команда |
| Сборка работает, подсказок нет | Запущен ли gopls; журнал Go в Output |
F5 сообщает об отсутствующем dlv |
Установлен ли Delve и доступен ли расширению |
| Ошибка скачивания модуля | Сеть, proxy и доступ к репозиторию зависимости |
| Требуется более новая Go | Требования проекта и совместимость toolchain |
main redeclared |
Нет ли нескольких main в одном пакете |
Не выключайте проверку модулей и не меняйте глобальные переменные Go только для исчезновения сообщения. Сначала прочитайте полный текст ошибки и проверьте локальную конфигурацию. В существующем проекте также не запускайте go mod tidy как универсальный ремонт без просмотра последующего diff: эта команда меняет описание зависимостей.
Настройка закончена, когда приложение запускается, оба теста проходят, форматирование воспроизводится и отладчик останавливается в нужной функции. Сохраните конфигурацию и go.mod в Git, исключив ненужные бинарные файлы сборки.