Привет, Хабр!
Чуть больше недели назад мы выпустили новую версию нашей IDE для Go — GoLand 2020.1.
![](https://habrastorage.org/webt/4o/w8/ht/4ow8httkqlctvhwl7vxhcivvkly.png)
Если кратко, в этот релизный цикл мы сфокусировались над расширением текущей поддержки Go Modules. Например, в файле go.mod
теперь работают автодополнение кода, рефакторинги и навигация, и это далеко не все!
Другим направлением стала борьба с шаблонным кодом и рутиной. Мы добавили множество новых видов автодополнения. Причем часть из них работает автоматически, не требуя вызова комбинаций клавиш. Другая часть расширила текущий набор автодополнений Smart Code Completion и Basic Code Completion.
Не обошлось и без новых инспекций, улучшений для отладчика, поддержки изменений из Go 1.14 и множества других, прочитать о которых можно ниже.
Кстати, узнать о новой функциональности можно и в интерактивной форме — пройдя прямо в IDE урок Features of GoLand 2020.1.
Улучшенная поддержка Go Modules
Мы поддержали переменные окружения GOPROXY
, GOPRIVATE
, GOSUMDB
, GONOPROXY
и GONOSUMB
из версии Go 1.13.
Устанавливайте значения для них в шаблоне проекта Go Modules. Нажмите иконку Browse в поле Environment, чтобы открыть новое окно Environment Variables.
![](https://habrastorage.org/webt/9f/xl/yi/9fxlyivduprp3dmhab7ic1z7uw4.gif)
Мы добавили автодополнение для операторов go
, module
, require
, replace
, exclude
, и локальных путей в replace
директивах для файла go.mod
.
![](https://habrastorage.org/webt/xp/qm/fs/xpqmfsyntl_zeepor5iiqvnbvqs.gif)
Переименовывайте и перемещайте директории, указанные внутри операторов replace
, с помощью Move и Rename рефакторингов.
![](https://habrastorage.org/webt/pq/bz/uq/pqbzuqgplrsy170973acddamnsy.gif)
Чтобы узнать, где используется путь к конкретной директории в файле go.mod
, вызовите Find Usages в Project View.
![](https://habrastorage.org/webt/g0/sv/aa/g0svaa3aftcvmi_qhnxuey-fkug.gif)
Загружайте недостающие зависимости и удаляйте неиспользуемые на лету с помощью Alt-Enter.
![](https://habrastorage.org/webt/x1/ey/lj/x1eyljslytzpl5pzrvx_jbef9rs.gif)
И, наконец, новая версия предупредит вас перед коммитом файла go.mod
с локальными путями в replace-директиве.
![](https://habrastorage.org/webt/wn/h3/ot/wnh3otkpmcrallwubnx7p4lif2k.gif)
Типы автодополнения кода, которые можно не запоминать
GoLand 2020.1 предложит if err != nil { ... }
для завершения обработки ошибок. Просто напишите if
внутри выражения.
![](https://habrastorage.org/webt/5r/ro/_x/5rro_xcmxaa-gcinxddwjnmmohk.gif)
Определяйте структуры и типы интерфейсов, указав ключевое слово type
или struct
и interface
.
![](https://habrastorage.org/webt/9p/ef/gf/9pefgfpnnmkrqij34y9vvul45u0.gif)
Fill Fields добавляет пробелы после двоеточия, когда этого требуют правила форматирования. Это действие также автоматически поставит запятую в конце выражения с объявлением составных литералов.
![](https://habrastorage.org/webt/j9/be/oh/j9beohgbtfigvr5ytgk3owcdd8u.gif)
При создании словарей автодополнение кода переместит курсор за закрывающую скобку, после того как вы укажете тип ключа.
![](https://habrastorage.org/webt/ew/sx/eo/ewsxeoca64cme3ndabvl8qgtwxa.gif)
Для типа возвращаемого значения функции автодополнение кода теперь предлагает локальные переменные и нулевые значения, которые соответствуют типу возвращаемого значения.
![](https://habrastorage.org/webt/lc/z-/vy/lcz-vy3cob-zg4vv3fov5xrg7uu.gif)
Smart Code Completion (⌃⇧Space или Ctrl+Shift+Space)
Умное автодополнение кода предлагает указатель для структур с инициализаторами полей.
![](https://habrastorage.org/webt/o5/vu/h7/o5vuh7gluefou2jvh0nrrehup-e.gif)
Кроме того, теперь автодополнение в первую очередь предложит совместимые типы для утверждения типа и переключателя типа.
![](https://habrastorage.org/webt/ot/hr/cp/othrcpvd2-8zigjejt45al_tb8k.gif)
Для утверждения типа автодополнение кода предложит тип присваиваемой переменной.
![](https://habrastorage.org/webt/5j/n8/ot/5jn8otniu4ryb2qn3sxwe5gudie.gif)
Наконец, GoLand 2020.1 предложит варианты автодополнения для указателей в выражении.
![](https://habrastorage.org/webt/da/mq/5s/damq5swqpwwysge-fldzcndlbyk.gif)
Basic Code Completion (⌃Space or Ctrl+Space)
Basic Code Completion для комментариев значительно упрощает написание документации. Автодополнение предлагает имена для текущих объявлений пакета и имена параметров для функций и методов.
![](https://habrastorage.org/webt/pz/ml/je/pzmlje6k2yvxzjfr2dcjasq6jwo.gif)
Кроме того, Basic Code Completion теперь предлагает литералы и преобразования.
![](https://habrastorage.org/webt/mp/1q/4p/mp1q4pnsjez6sszihcqubbkumga.gif)
Редактирование кода
При написании сигнатуры функции, возвращающей несколько значений, GoLand 2020.1 добавит скобки вокруг типов возвращаемого значения, если после первого типа вы поставите запятую.
![](https://habrastorage.org/webt/rh/ll/uq/rhlluqhnw10umf7ldyvxukejyrs.gif)
Когда вы вставляете текст в строковый литерал, IDE экранирует текст.
![](https://habrastorage.org/webt/vw/yz/wb/vwyzwbbst6dtimwk6mwmymifd5k.gif)
Чтобы узнать больше о функциях редактирования кода, которые работают автономно, то есть не требуя от пользователя никаких действий, прочтите статью GoLand Editing Features You Didn’t Know About (на английском).
Поддержка Go 1.14
Поддержка перекрывающих интерфейсов
В Go 1.14 добавилась поддержка встраивания перекрывающих интерфейсов, и мы сразу же их поддержали! Когда вы описываете различные аспекты типа, использующего перекрывающие интерфейсы, GoLand не будет предупреждать о дублировании методов.
Автоматический вендоринг
Вендоринг включается автоматически в версии Go 1.14, если корень модуля содержит директорию vendor. Для GoLand 2020.1 мы решили реализовать аналогичное поведение для версии 1.13 и более ранних. IDE будет автоматически разрешать импорт в директорию vendor, если она присутствует в модуле.
Обновления отладчика
Поддержка ярлыков профилировщика
Поддержка ярлыков профилировщика помогает быстрее ориентироваться между горутинами и анализировать дампы памяти. Подробнее об этом в статье How to Find Goroutines During Debugging (на английском).
![](https://habrastorage.org/webt/65/tn/ay/65tnay0wkb2l5dckmflvdggnsmu.gif)
Поддержка макросов
Используйте макросы в качестве параметров для запуска и отладки приложения. В диалоге Run/Debug Configurations нажмите + в полях Go Tool или Program arguments, чтобы открыть новый диалог Macros со списком доступных макросов.
![](https://habrastorage.org/webt/r1/qt/lp/r1qtlptslwir8zfclyilbl5lncq.gif)
Кроме того, теперь вы можете сохранять файлы с конфигурациями в проекте. Выберите опцию Store в верхней части диалога Run/Debug Configurations.
Постфиксное автодополнение
Шаблон .else добавляет оператор if для проверки того, не является ли выражение ложным.
![](https://habrastorage.org/webt/id/4a/6a/id4a6a8tjjhe_rfpypn82gsu-8u.gif)
Быстрые исправления
Измените вызов без форматирования на вызов с форматированием с помощью Alt+Enter.
![](https://habrastorage.org/webt/b9/c2/ax/b9c2axiy7t7ermreq5-roaei-bg.gif)
Быстрое исправление Create variable теперь предлагает подсказку ожидаемого типа, чтобы ускорить ввод правильного значения.
![](https://habrastorage.org/webt/nx/tf/nt/nxtfnt3rvgknh2xhtqn5pjwcoka.gif)
Инспекции кода
Эта новая инспекция предупреждает о недопустимых вызовах методов с получателем-указателем на значениях, которые не являются указателями. Для обнаруженной проблемы предлагается быстрое исправление.
![](https://habrastorage.org/webt/nx/-7/sg/nx-7sgoykgvemv6dpbj0pyl6fyi.gif)
Проверка Invalid conversions of uintptr to unsafe.Pointer предупредит о потенциально опасном преобразовании между uintptr
и unsafe.Pointer
для преобразования целых чисел в указатели.
![](https://habrastorage.org/webt/pu/ga/kw/pugakwxcde0lx6ympmulmfvdxes.png)
Проверка Unmarshal is called with incorrect argument анализирует вызовы json.Unmarshal
и похожих функций из encoding/json
, encoding/xml
и encoding/gob
пакетов.
![](https://habrastorage.org/webt/xx/ju/fb/xxjufbe2fnlaz55_u1yqu-0q-se.png)
Locks mistakenly passed by value помогает избежать случайного копирования значений типа sync.Locker
.
![](https://habrastorage.org/webt/w4/vk/vw/w4vkvwmd2oyxqegxiprzwozertq.gif)
Live templates
Шаблоны consts, vars, types и imports помогут вам быстро создавать группы объявлений. При использовании одного из этих шаблонов GoLand добавит скобки вокруг имени объявления. Шаблон fori вставляет код для классического for-loop.
![](https://habrastorage.org/webt/cj/sx/fa/cjsxfaplaiv4kon5adesejs88ea.gif)
Рефакторинги
Рефакторинг Extract Method сохраняет исходный порядок родительской функции и параметры метода. Rename автоматически определяет переименование объявления. Теперь, когда вы переименовываете объявление вручную, IDE покажет иконку в поле редактора. Нажав на иконку, вы переименуете все использования разом.
![](https://habrastorage.org/webt/ek/8e/dx/ek8edx7fhx9pfkvrkwfc-t76mke.gif)
Навигация
Navigate to implementations (⌥⌘B на MacOS и Ctrl+Alt+B на Windows/Linux) и Navigate to Declaration или Usages (⌘B на MacOS и Ctrl+B на Windows/Linux) теперь в первую очередь показывают результаты текущего проекта.
Кроме того, действие Find Usages (Alt+F7 в Windows/Linux или ⌥F7 в macOS) теперь всегда ищет использование методов интерфейса по умолчанию. Для поиска использований текущего метода используйте Alt+Shift+Ctrl+F7 на Windows/Linux или ⌥⇧⌘F7 на MacOS.
![](https://habrastorage.org/webt/q2/lw/qa/q2lwqakkh1ueamtu0dcwk-vdc5u.gif)
Разное
- JetBrains Mono — новый шрифт от JetBrains, созданный специально для программистов, — доступен по умолчанию. Подробнее о нем рассказывается здесь.
- По умолчанию в IDE установлен плагин Grazie, обеспечивающий интеллектуальную проверку орфографии и грамматики текста.
- Новый режим LightEdit Mode позволяет открыть файл в текстовом редакторе без создания и загрузки проекта. Чтобы попробовать эту функциональность, сначала нужно сделать запуск из командной строки Tools | Create Command-line Launcher, как описано здесь (если вы используете приложение Toolbox App, шаги будут немного отличаться). Более подробные инструкции о том, как открыть файл, сравнить/объединить файлы и даже выполнить проверку кода, см. в этом разделе веб-справки.
- Мы добавили новый режим Дзен, который избавляет вас от возможных отвлекающих факторов и помогает сконцентрировать все внимание на коде. По своей сути, новый режим сочетает в себе режимы Distraction Free и Full Screen. Чтобы включить режим Дзен, перейдите по ссылке View | Appearance | Enter Zen Mode или выберите его из всплывающего меню Quick Switch Scheme (Ctrl+` | View mode | Enter Zen Mode).
- External Documentation теперь ведет к https://pkg.go.dev вместо https://godoc.org.
- Мы вернули цветовую схему Default с новым именем — Classic Light.
![](https://habrastorage.org/webt/0e/qj/6i/0eqj6irjbz-iipqpzsbh9z7r3_o.png)
Спасибо, что дочитали до конца! Будем рады вашим отзывам и постараемся ответить на любые вопросы. Пишите нам здесь в комментариях, в Twitter или в баг-трекер. Также приглашаем вас в канал #goland-gophers в Slack англоязычного сообщества Go.
Команда JetBrains GoLand
The Drive to Develop