Gopls: сервер языка для Go
gopls (произносится как “Go please”) — официальный языковой сервер для Go,
разработанный командой Go. Он предоставляет широкий спектр возможностей IDE для
любого
редактора, совместимого с LSP.
Вам не следует напрямую взаимодействовать с gopls — он будет автоматически интегрирован в ваш
редактор. Конкретные функции и настройки немного различаются в зависимости от редактора, поэтому рекомендуется
перейти к документации для вашего редактора ниже. Также документация по каждой функции
gopls описывает, поддерживается ли она в каждом клиентском редакторе.
Эта документация (https://go.dev/gopls) описывает последний выпуск gopls. Чтобы предварительно просмотреть документацию для выпуска, находящегося в разработке, посетите https://tip.golang.org/gopls.
Возможности
Gopls поддерживает широкий спектр стандартных возможностей LSP для навигации, автозавершения, диагностики, анализа и рефакторинга, а также ряд дополнительных функций, отсутствующих в других языковых серверах.
См. Список возможностей для полной документации о том, что может делать Gopls.
Редакторы
Чтобы начать работу с gopls, установите плагин LSP в вашем предпочитаемом редакторе.
Если вы используете gopls с редактором, которого нет в этом списке, пожалуйста, отправьте нам CL для обновления этой документации.
Установка
Чтобы установить последнюю стабильную версию gopls, выполните следующую команду:
<code class="language-sh">go install golang.org/x/tools/gopls@latest </code>
Некоторые редакторы, такие как VS Code, выполнят этот шаг автоматически и обеспечат обновление Gopls при выходе новой стабильной версии.
После обновления может потребоваться перезапустить запущенные процессы Gopls, чтобы увидеть эффект. Каждый клиент
имеет свой способ перезапуска сервера.
(На UNIX-машине можно использовать команду killall gopls.)
Узнать больше можно в расширенных инструкциях по установке.
Релизы
Релизы gopls следуют семантическому
версионированию, при этом основные изменения и новые функции вводятся только в новых минорных версиях
(то есть версиях вида v*.N.0 для некоторого N). Последующие патч-релизы содержат только отобранные
исправления или поверхностные обновления.
Чтобы соответствовать графику релизов Go, мы стремимся выпускать новую минорную версию Gopls примерно каждые три месяца, а патч-релизы — примерно ежемесячно, согласно следующей таблице:
| Месяц | Версия(и) |
|---|---|
| Янв | v*.<N+0>.0 |
| Янв-Март | v*.<N+0>.* |
| Апр | v*.<N+1>.0 |
| Апр-Июнь | v*.<N+1>.* |
| Июл | v*.<N+2>.0 |
| Июл-Сент | v*.<N+2>.* |
| Окт | v*.<N+3>.0 |
| Окт-Дек | v*.<N+3>.* |
Для получения дополнительного контекста по этой политике см. https://go.dev/issue/55267.
Настройка рабочего пространства
gopls поддерживает режимы Go module, мультимодульный режим и GOPATH. См.
документацию по рабочему пространству для информации о поддерживаемых
компоновках рабочих пространств.
Конфигурация
Вы можете настроить gopls, чтобы изменить опыт работы с редактором или просмотреть дополнительную
информацию для отладки. Параметры конфигурации будут доступны через ваш редактор, поэтому обратитесь к
инструкциям по редактору для получения конкретных деталей. Полный список настроек
gopls можно найти в
документации по настройкам.
Переменные окружения
gopls наследует переменные окружения вашего редактора, поэтому учитывайте любые переменные,
которые вы настроили. Некоторые редакторы, такие как VS Code, позволяют пользователям
выбирочно переопределять значения некоторых переменных окружения.
Политика поддержки
gopls поддерживается инженерами
команды
инструментов Go,
которые активно отслеживают
Go
и
VS Code Go трекеры
проблем.
Поддерживаемые версии Go
gopls следует
Политике выпусков Go,
что означает,
что официально поддерживаются только две последние основные версии Go.
При использовании gopls существует три версии, о которых следует знать:
- Версия Go, использованная для сборки gopls: версия Go, использованная для сборки gopls.
- Версия команды go: версия команды go list, выполняемой gopls для загрузки информации о вашем рабочем пространстве.
- Языковая версия: версия в директиве go текущего файла в go.mod, которая определяет семантику языка Go для этого файла.
Начиная с выпуска Go 1.23.0 и gopls@v0.17.0 в августе 2024 года, мы будем поддерживать только последнюю версию Go как версию Go, использованную для сборки gopls. Однако, благодаря поддержке обратной совместимости, добавленной в Go 1.21, при условии использования Go 1.21 или более поздней версии для установки gopls, любое необходимое обновление toolchain будет обрабатываться автоматически, как и любая другая зависимость.
Кроме того, начиная с gopls@v0.17.0, версия команды go будет сокращена с 4 версий до 3. Это более согласуется с Политикой выпусков Go.
gopls поддерживает все версии Go как языковую версию, предоставляя
ошибки компилятора, основанные на версии языка, и фильтруя доступные символы стандартной библиотеки
в соответствии с API стандартной библиотеки, доступными в данной версии Go.
Поддержка сборки gopls с устаревшими версиями Go вызывала существенные неудобства для разработчиков gopls и замедляла реализацию других улучшений. Если вы не можете установить поддерживаемую версию Go в вашей системе, вы всё ещё можете установить более старую версию gopls. В следующей таблице показана последняя версия gopls, которая поддерживает определённую версию Go без предупреждений. Более новые выпуски Go, чем указанные в таблице, могут использоваться с любой версией gopls.
| Версия Go | Последняя версия gopls с поддержкой (без предупреждений) |
|---|---|
| Go 1.12 | gopls@v0.7.5 |
| Go 1.15 | gopls@v0.9.5 |
| Go 1.17 | gopls@v0.11.0 |
| Go 1.18 | gopls@v0.14.2 |
| Go 1.20 | gopls@v0.15.3 |
Поддерживаемые системы сборки
gopls в настоящее время поддерживает только команду go, поэтому если вы используете другую
систему сборки, gopls будет работать некорректно. Bazel официально не поддерживается, но может быть
настроен для работы с соответствующим драйвером go/packages.
См. bazelbuild/rules_go#512
для получения дополнительной информации.
Вы можете следовать этим инструкциям
по настройке gopls для работы с Bazel.
Устранение неполадок
Если вы испытываете проблемы с gopls, пожалуйста, следуйте описанным в руководстве по устранению неполадок шагам.
Дополнительная информация
Исходные файлы для этой документации можно найти в golang.org/x/tools/gopls/doc.