Хабр, привет! Две недели назад мы выпустили GoLand 2020.2 и хотим рассказать про основные изменения в этом релизе.
![](https://habrastorage.org/webt/y5/qy/pw/y5qypwklos4zgklxuvobtxrqfrw.png)
Если коротко, то мы улучшили поддержку Go modules, сделали удобнее поиск возможных проблем и слабых мест в коде, добавили новые проверки кода.
Кроме того, вы найдете новые функции редактирования кода, экспериментальную поддержку дженериков, возможность отправлять код из редактора в Go Playground, обновления для системы контроля версий, включая поддержку WSL 2 для Git на Windows, и многое другое!
Кстати, узнавать о новой функциональности в интерактивной форме можно прямо в IDE. Пройдите урок What's New in GoLand 2020.2 на экране приветствия.
Go modules
Начиная с версии Go 1.15 можно изменить расположение кэша модулей по умолчанию с $GOPATH/pkg/mod
на другую папку, используя новую переменную окружения GOMODCACHE.
Для этого укажите GOMODCACHE в Preferences/Settings | Go Modules | Environment. IDE распознает новое расположение и использует его для всех последующих действий с зависимостями.
![](https://habrastorage.org/webt/jy/le/0x/jyle0xhir7i1t0b8lysrakfb-qi.png)
Теперь можно закомментировать строки в файле go.mod с помощью Comment With Line Comment (Ctrl+/ на Windows/Linux и ⌘/ на macOS).
![](https://habrastorage.org/webt/he/w1/mr/hew1mr8hnzhcokd_0evsb0qqvmc.gif)
Работа с комментариями
IDE отображает ссылки из комментариев на соответствующие объявления на уровне пакета и позволяет перейти к ним с помощью Navigate to Declaration or Usages (⌘B на macOS и Ctrl+B/ на Windows/Linux).
![](https://habrastorage.org/webt/11/k2/xi/11k2xij0mww8qghnjxhsc_yyfug.gif)
Инспекции кода
Inspections Widget показывает количество предупреждений, ошибок и опечаток в текущем файле в правом верхнем углу редактора. Вы можете переходить от одной ошибки к другой с помощью стрелок или хоткея Next Error (F2).
Виджет позволяет настроить уровень подсветки (не подсвечивать ничего, подсвечивать только ошибки или подсветить все), а также изменить уровень значимости проверок или переключиться в Compact View, чтобы виджет не отвлекал вас.
![](https://habrastorage.org/webt/ul/sb/5-/ulsb5-jn9v6tqrgvip5mgdxsrbu.gif)
Новое окно Problems показывает список предупреждений и ошибок в текущем файле с описанием этих проблем и позволяет сразу же их исправить с помощью Alt+Enter.
Чтобы открыть окно Problems, нажмите на Inspections Widget или перейдите к нему через View | Tool Window | Problems. Чтобы перейти к строке кода с ошибкой в редакторе, щелкните по ней правой кнопкой мыши.
![](https://habrastorage.org/webt/qk/6v/pw/qk6vpwmmrkrrt-vhb7nxtyenql8.gif)
Новая инспекция кода предупреждает о возможных проблемах преобразований string(int)
, которые возвращают UTF-8 представление символа Unicode x
вместо ожидаемого десятичного представления строки x
.
GoLand уведомит о таких потенциальных ошибках и предложит быстрое исправление.
![](https://habrastorage.org/webt/qp/bw/dg/qpbwdgah42tck1m2itgcei4xk_i.gif)
GoLand предупредит о распространенных ошибках в использовании имен тестов и примеров — вам больше не нужно вызывать для этого go vet. IDE уведомит о таких потенциальных ошибках и предложит быстрое исправление (quick-fix). Например, GoLand предложит переименовать Testme в TestMe.
![](https://habrastorage.org/webt/co/m2/7t/com27tfilehl-uko28m9qbdu0eo.png)
Инспекция кода Malformed struct tag проверяет, соответствуют ли теги структур стандартам языка, и предупреждает о потенциальных проблемах в коде.
![](https://habrastorage.org/webt/yp/uj/v0/ypujv0_qjpu9_zfiqwubawrlqpm.png)
Инспекция Impossible interface type assertion анализирует выражения проверки типов v.(T), в том числе внутри оператора switch, и уведомляет пользователя, если тип V переменной v является интерфейсом, который не может реализовывать целевой интерфейс T. Это происходит, когда V и T содержат методы с одинаковым именем, но разными сигнатурами.
![](https://habrastorage.org/webt/oy/lo/ys/oyloysqgxlqxjaywiu4b_voiyue.png)
Редактирование кода
Чтобы посмотреть предварительный результат быстрого исправления перед его применением, вызовите Show Context Actions с помощью Alt+Enter, выберите нужное действие и нажмите ⌥+Space на macOS или Ctrl+Shift+I на Windows и Linux.
![](https://habrastorage.org/webt/nx/bo/sn/nxbosne9hfvb8kj7bj5wnpgewjg.gif)
Add Caret Per Selected Line создает курсоры в конце каждой выделенной строки. Используйте Alt+Shift+G на Windows/Linux и ⌥⇧G на macOS.
![](https://habrastorage.org/webt/dx/x5/sz/dxx5szq7wgbk3md3yhmmjmm1aki.gif)
Настройте перенос на новую строку для аргументов вызова, параметров функций и составных литералов в Preferences/Settings | Editor | Code Style | Go | Wrapping and Braces.
Также можно использовать Put arguments on separate lines и Put arguments on one line с помощью Alt+Enter, чтобы вручную разделить или объединить элементы.
![](https://habrastorage.org/webt/vy/2j/uc/vy2jucb7tg-lpqlppin1xololfq.gif)
Работа с переменным числом аргументов
Рефакторинг Introduce Variable (Ctrl+Alt+V на Windows и Linux, ⌘⌥ V на macOS) теперь умеет упаковывать аргументы в новый слайс, в то время как Inline Variable (⌥⌘N на macOS и Ctrl+Alt+N на Linux и Windows), наоборот, распаковывает их из слайса.
![](https://habrastorage.org/webt/w7/dx/rv/w7dxrv9bqfxfgq3zczccfz8t05e.gif)
А при помощи быстрого исправления Unpack slice можно передать слайс последним аргументом вариативной функции.
![](https://habrastorage.org/webt/y-/vd/af/y-vdaf78drkfndnmtwgawsnt6p8.gif)
Сохранение проекта в качестве шаблона
Теперь вы можете повторно использовать проекты или файлы, сохраняя их как пользовательские шаблоны. Для этого выберите Tools | Save Project as Template. В момент создания нового проекта IDE воссоздаст дерево проекта с файлами, папками и конфигурациями сборки.
![](https://habrastorage.org/webt/xr/ju/qt/xrjuqtafeuf6uhkl4kszrmb9awe.png)
Go Playground
Теперь вы можете отправлять код в Go Playground, открыв контекстное меню. Выберите Go Tools | Share in Playground в раскрывающемся меню или Tools | Go Tools | Share in Playground, либо используйте горячие клавиши ⌥⇧⌘S на macOS или Ctrl+Alt+Shift+S на Windows/Linux.
Playground также работает с go2
-файлами, в этом случае GoLand использует https://go2goplay.golang.org/.
![](https://habrastorage.org/webt/nn/ev/8n/nnev8ndvpzbh07g3c7qjojqikt4.png)
Поддержка дженериков
Команда Go анонсировала прототип дизайна дженериков (или, более строго, параметров-типов). Подробности можно найти в черновике реализации.
В GoLand 2020.2 есть экспериментальная поддержку дженериков. Для работы с ними включите Enable experimental support for generics a.k.a type parameters в Settings/Preferences | Go.
Текущая реализация обеспечивает подсветку синтаксиса и базовую навигацию ссылок и работает только в go2-файлах.
![](https://habrastorage.org/webt/tn/id/fr/tnidfrx0wusq3vviainq7etnmuq.png)
Под капотом IDE
Если Vendoring mode включен, то вы собираете свое приложение, используя только те пакеты зависимостей, которые хранятся в папке vendor вашего проекта.
Теперь, если в проекте есть папка Vendor и включен режим Enable vendoring mode automatically в Settings/Preferences | Go | Go Modules, GoLand будет использовать только папку vendor и не будет обращаться к кэш памяти модулей.
![](https://habrastorage.org/webt/tl/aa/7s/tlaa7stxe8qtkupuynwg0l7_ei8.gif)
GoLand 2020.2 запускает команды go list
последовательно и показывает индикатор выполнения с информацией о количестве команд в очереди.
![](https://habrastorage.org/webt/ty/0c/yd/ty0cydkxmpr-qev6rgdhockymiy.gif)
Система контроля версий
Поддержка WSL 2 для Git на Windows
GoLand 2020.2 позволят использовать Git из WSL 2, который изначально доступен в майском обновлении Windows 10, версия 2004. Если Git не установлен в Windows, GoLand автоматически будет искать Git в WSL и использовать его оттуда. IDE также автоматически переключится на Git из WSL для проектов, открытых из WSL (при помощи \wsl$ path
).
![](https://habrastorage.org/webt/r4/om/8z/r4om8ziscq8i3ha95zs48mwlsve.gif)
Обновленные диалоги для работы с Git
Мы переработали диалоги Merge, Pull и Rebase для Git, сделав их более аккуратными и информативными. Также теперь легче понять, какая команда будет выполняться. И еще добавили опцию –rebase к диалогу Pull и –no-verify к диалогу Merge.
![](https://habrastorage.org/webt/bl/pb/gu/blpbguozuf8sivlkgeawlxz6xuo.png)
Расширенная поддержка пул-реквестов GitHub
Мы добавили полную поддержку пул-реквестов GitHub. Просматривайте, назначайте и объединяйте пул-реквесты, читайте встроенные комментарии и изучайте хронологию, отправляйте комментарии и ревью, а также принимайте изменения, не покидая GoLand.
![](https://habrastorage.org/webt/hl/s4/bq/hls4bq8hsi_2cy4zfthnshbrdry.png)
Улучшенная презентация результатов Compare branches
Теперь, когда вы сравниваете две ветки в GoLand, вы можете увидеть коммиты обеих веток в одном окне. IDE открывает список коммитов этих веток в редакторе вместо окна VCS, где было недостаточно места для отображения всей информации.
![](https://habrastorage.org/webt/9k/cp/28/9kcp28pjijzr2-i8pybpc_nvuwq.png)
На этом всё! Идеи улучшений мы зачастую берем из ваших отзывов и предложений, так что пишите нам здесь в комментариях, в наш баг-трекер или в Twitter.
По традиции напоминаю, что если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, нужно просто установить плагин Go.
Спасибо за внимание!