Привет, Хабр! 

Вышел GoLand 2021.2 — второй релиз этого года. Сегодня расскажем, что нового в этом релизе, и покажем, как пользоваться новой функциональностью. 

Что нового: 

  • Расширенная поддержка Go-модулей 

  • Возможность запускать gofmt вместе с встроенным форматером GoLand 

  • Поддержка новой функциональности Go 1.17 — преобразования среза в указатель на массив

  • Возможность подписывать коммиты GPG-ключом 

  • Автоматическая перезагрузка страницы в браузере при сохранении кода

  • Автодополнение кода для полей и операторов в MongoDB

И многое другое! 

Кстати, узнать о новой функциональности в интерактивной форме можно прямо в IDE. Пройдите урок What's New in GoLand 2021.2, доступный на экране приветствия в разделе Learn GoLand. Там же вы найдете наш новый Onboarding Tour, который поможет поближе познакомиться с IDE, а также курс по Git. 

Go-модули 

Загружайте обновления go.mod вручную 

Когда вы вносите изменения в go.mod, GoLand автоматически исполняет команду go list и загружает эти изменения. Некоторые пользователи отмечали, что автоматическая загрузка осложняет работу, потому что иногда IDE исполняет команду go list прямо во время редактирования.    

Теперь вы можете вручную загружать обновления go.mod. Для этого перейдите в Settings/Preferences | Build, Execution, Deployment | Build Tools и выберите External Changes

Теперь, если вы внесете изменений в go.mod, то увидите иконку Load Go modules Changes. Нажмите на нее, когда закончите редактирование, — изменения go.mod загрузятся. Если вы выбрали опцию External Changes, то автоматическая загрузка будет по-прежнему работать для внешних изменений. 

Чтобы иконка появлялась при внесении любых изменений — как внешних, так и внутренних, — нужно убрать галочку в чекбоксе Reload project after changes in the build scripts

На наш взгляд, отключать автоматическую загрузку обновлений go.mod не стоит. Но если для вас эта опция, напротив, окажется полезной, обязательно расскажите нам об этом (нам интересно узнать подробнее о ваших сценариях).  

Улучшенная поддержка версий Go

Если вы использовали в коде функциональность из более новой версии Go, чем та, которая указана в go.mod, GoLand сообщит об ошибке. 

Для числовых литералов и //go:embed есть быстрые исправления, с помощью которых можно поменять версию языка в go.mod. 

Например, если вы хотите использовать директиву //go:embed, которая доступна в версии 1.16, а в go.mod у вас указана версия 1.15, GoLand сообщит, что функциональность //go:embed доступна только в версии 1.16 и выше. Нажмите Alt + Enter (⌥+Enter), и IDE предложит быстрое исправление, которое изменит версию Go в go.mod

Go значит Go modules

Теперь при выборе опции Go на начальном экране создается проект с Go-модулями. А проекты с GOPATH теперь называются “Go (GOPATH)”. 

Работа с неиспользуемыми зависимостями  

Бывают ситуации, когда в директивах replace в файле go.mod оказываются зависимости, которые вы не используете в коде. Например, вы сгенерировали go.mod с помощью скрипта, который добавил много директив replace — как нужных, так и не очень. 

Раньше GoLand не загружал и не удалял неиспользуемые зависимости в директивах replace, и они становились красными. Эти строки кода красного цвета в go.mod вынуждали некоторых пользователей искать ошибки, которых на самом деле не было, — наличие неиспользуемых зависимостей не влияло на работу приложения.  

Теперь неиспользуемые зависимости в директивах replace становятся серыми, чтобы их было легче отличить от ошибок. Серым форматируются и неиспользуемые зависимости в директивах require, рядом с которыми есть комментарий indirect.

Наведите указатель мыши на серую строку, и вы увидите сообщение “Unused dependency”. Если нужно загрузить неиспользуемые зависимости, нажмите Alt+Enter (⌥+Enter) и выберите опцию Download all modules to the module cache. Также можно загрузить любую из зависимостей по отдельности. 

Форматирование

В Go есть утилита gofmt, которая форматирует код. И, как вы, возможно, знаете, у GoLand есть свой встроенный форматер. 

GoLand позволяет настроить запуск gofmt вместе со встроенным форматером. Однако пользователи просили нас сделать использование gofmt более доступным и удобным. 

В этом релизе у нас появилась опция Run gofmt on code reformat, позволяющая запускать gofmt вместе со встроенным в GoLand форматером. 

Опция активна по умолчанию. Вы можете запускать оба инструмента с помощью комбинации Ctrl+Alt+L (⌘+⌥+L). Команда gofmt будет исполняться после встроенного форматера. 

Это лишь первый шаг. Мы планируем и другие изменения в работе с gofmt.    

Больше быстрых исправлений

Поддержка нового синтаксиса ограничений сборки //go:build 

В прошлом году команда разработки Go предложила заменить синтаксис ограничений сборки // +build на //go:build

В связи с этим мы добавили в GoLand два быстрых исправления. Первое переносит строку с //go:build в начало файла, как того требует новый синтаксис.  

В Go 1.16 можно использовать либо старый синтаксис, либо оба вместе. Чтобы сгенерировать объявление // +build в дополнение к //go:build, вы можете воспользоваться вторым быстрым исправлением. 

Активируйте поддержку cgo одним кликом

Если вы импортировали пакет для языка С, но забыли активировать поддержку cgo в настройках проекта, GoLand предложит быстрое исправление Enable cgo support

Опция Navigate to cgo import перемещает курсор в начало названия пакета. Это поможет вам отыскать инструкцию импорта в большом проекте. 

GoLand также предложит изменить настройки, если вы указали в ограничениях сборки одну ОС, а в настройках — другую. В этом случае также будет доступна опция переместить курсор на строку с объявлением об ограничениях сборки. 

Отладчик

Теперь вы можете пользоваться режимом Preview во время отладки приложения. Он позволяет открывать файлы последовательно в одной вкладке. Так вы избежите загромождения видимой зоны редактора многочисленными открытыми вкладками.

Чтобы активировать режим Preview во время отладки, перейдите в Preferences/Settings | Editor | General | Editor Tabs и включите опцию Enable preview tab.

Когда вы открываете файлы в режиме предпросмотра, название файла показывается курсивом. Как только вы начинаете вносить изменения, шрифт меняется на обычный и режим Preview для этого файла отключается. 

Go 1.17

В Go 1.17 есть возможность преобразовывать срез в указатель на массив. GoLand не будет считать такие преобразования ошибками. Чтобы использовать функциональность Go 1.17, нужно изменить значение GOROOT на “Go 1.17beta1” или  “Go 1.17rc1” в Settings/Preferences | Go.

Быстрая навигация

Теперь Navigate to implementations работает с реализациями интерфейсов, которые находятся в папке internal. Чтобы перейти к реализациям, нажмите на значок в поле редактора слева от интерфейса. Также можно переходить к интерфейсу от его реализаций. 

Интеграция с системами контроля версий

Подпись коммитов GPG-ключом

В GoLand 2021.2 вы можете верифицировать коммиты с помощью GPG-ключа. Чтобы активировать эту функциональность, перейдите в Settings | Version Control | Git.

Если у вас уже есть ключ, то просто выберите его из раскрывающегося списка. Если вы делаете это в первый раз, то сначала ключ нужно сгенерировать

Новые проверки перед коммитом 

В разделе проверок перед коммитом вы найдете две новые опции: Run tests и Analyze code. Они позволяют тестировать и анализировать код перед коммитом. Чтобы активировать их, перейдите в Settings | Version Control | Commit | Before commit или нажмите на значок шестеренки в окне Commit.

Обратите внимание, что возможность тестировать код перед коммитом доступна только в том случае, если у вас включена опция Use non-modal commit interface в Settings | Version Control | Commit

Новая поисковая строка в Local History

Мы добавили в окно Local History новую строку поиска. Локальная история отслеживает изменения в файлах независимо от систем контроля версий. Новая строка поиска поможет быстрее найти нужный текст в изменениях файла. 

Чтобы открыть Local History, щелкните правой кнопкой на файле и перейдите в Local History | Show History

Это не значит, что системами контроля версий можно больше не пользоваться. Local History их, конечно, не заменит, но может послужить палочкой-выручалочкой в случае, если вы, например, не успели внести изменения в Git-репозиторий.

Changes вместо Default Changelist

Список Default Changelist, в котором показывались файлы с изменениями, еще не внесенными в Git-репозиторий, теперь называется Changes. Это обновление будет доступно по умолчанию во всех ваших новых проектах. Кроме того, операции Git больше не будут автоматически создавать changelist.

Улучшения пользовательского интерфейса

Новое представление для объединенных проектов 

Объединенные проекты в окне Project теперь представлены иначе. Раньше они показывались как дочерние папки существующего проекта, хотя их реальное расположение в файловой системе могло быть совершенно другим. Сейчас объединенные проекты представлены в виде отдельных папок. 

Дополнительные настройки и стрелки навигации 

Мы добавили в настройки новый раздел — Advanced Settings. В нем содержатся дополнительные настройки, например возможность изменить ширину левого отступа в режиме Distraction-free

Также в правом верхнем углу окна Settings появились стрелки, с помощью которых можно переходить между разделами. 

Уведомления о новых версиях 

GoLand уведомит вас о наличии новой версии, и вы сможете установить обновление прямо из IDE. Для этого у вас должно быть установлено приложение Toolbox App версии 1.20.8804 и выше. 

Новые опции для встроенного терминала

Курсоры бывают разные. Если вам больше нравится вертикальная линия или нижнее подчеркивание, перейдите в Settings | Tools | Terminal и задайте удобную для вас форму курсора при помощи раскрывающегося списка.   

В настройках терминала есть еще одно изменение: теперь мы поддерживаем опцию Use Option as Meta key. Клавиша Meta изменяет назначение другой клавиши, если нажать их вместе. Использование клавиши Meta может быть полезным, если вы много работаете в терминале. Например, эта опция позволяет использовать следующие комбинации: 

  • Option + F — перейти к следующему слову

  • Option + B — вернуться на одно слово назад

  • Option + D — удалить следующее слово

Улучшенное окно Change project icon

Мы изменили вид окна, которое позволяет загрузить свою иконку для проекта. Для этого нажмите на название проекта в списке проектов на начальном экране и в контекстном меню выберите Choose project icon.  

Веб-разработка

Перезагрузка страниц при сохранении изменений

Мы доработали Live Edit. Теперь GoLand может автоматически обновлять страницу в любом браузере, когда вы изменяете и сохраняете HTML, CSS или JavaScript. 

Чтобы использовать эту функцию, откройте HTML-файл и нажмите на иконку вашего любимого браузера. Перезагрузка страниц при сохранении изменений включена по умолчанию. Настройки Live Edit можно изменить в Settings | Build, Execution, Deployment | Debugger | Built-in Server.

Рефакторинг для хуков useState в React

Рефакторинг Rename теперь работает для хуков useState в React. Просто поставьте курсор на значение состояния и вызовите рефакторинг Rename с помощью комбинации Shift+F6(⇧+F6) или щелкните правой кнопкой мыши и выберите Refactor | Rename.

Автоимпорт для require()

GoLand уже умеет добавлять недостающие инструкции import для ES6-символов, и теперь такая же функция доступна для модулей CommonJS — необходимые инструкции require() добавятся в код при выполнении автодополнения. 

Автодополнение частных пакетов npm 

Автодополнение теперь работает для частных пакетов npm. GoLand покажет данные о последних версиях таких пакетов, как и в случае с публичными пакетами. 

Расширенная поддержка web-types

Мы запускаем новую версию web-types — стандарта для документирования различных фреймворков. Первая версия web-types включала в себя поддержку Vue.js. 

Мы хотим построить новую архитектуру, которая будет поддерживать новые JavaScript-фреймворки и улучшит поддержку для уже существующих. Чтобы лучше понять, как использовать web-types в ваших проектах, прочитайте статью в блоге WebStorm или посмотрите вебинар

Работа с базами данных

Консоль MongoDB теперь поддерживает автодополнение для полей, вложенных полей и полей внутри агрегатных выражений. Также автодополнение работает для операторов запроса и проекции, операторов обновления и стадий агрегирования. 

Другие изменения

Действия при сохранении кода

Мы собрали вместе все действия, которые можно запускать при сохранении кода. Теперь их можно настроить в Settings | Tools | Actions on Save. Просто поставьте галочку в чекбоксе рядом с действием, которое хотите активировать. 

Также можно применить расширенные настройки. Для этого наведите указатель на действие, нажмите на ссылку с настройками конфигурации и измените настройки на появившейся странице. 

Автоматическое удаление кеша и логов

GoLand автоматически удаляет кеш и логи после того, как они не обновлялись 180 дней. Этот процесс не затронет ваши системные настройки и плагины.

Вы можете удалить кеш и логи вручную с помощью действия Help | Delete Leftover IDE Directories.

Проверка орфографии и грамматики в файлах Go

Теперь IDE по умолчанию выполняет проверку на опечатки и грамматические ошибки в файлах Go. Проверка возможна благодаря плагину Grazie, который включен в GoLand. Добавить и удалить языки, для которых вы хотите настроить проверку опечаток и ошибок,  можно в Settings | Editor | Natural Languages.

Чтобы отрегулировать, в каких типах файлов будет активен Grazie и на какие именно языковые проблемы он будет обращать внимание, перейдите в подраздел настроек Grammar

Пользовательский интерфейс на китайском, японском и корейском

Интерфейс GoLand теперь полностью локализован на китайский, корейский и японский. Локализация доступна в виде плагинов, которые не включены в IDE; их можно установить из репозитория.  

Code With Me

Теперь во время сессии Code With Me вы можете видеть, какие опции автодополнения GoLand показывает вашим коллегам. Чтобы использовать эту функциональность, включите режим Following.    

Это все на сегодня! Пишите нам здесь в комментариях, в наш баг-трекер или Twitter — мы часто берем идеи для улучшений из ваших отзывов и предложений. 

Напомню, что, если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, нужно лишь установить этот плагин.

Спасибо за внимание! 

Комментарии (12)


  1. YouROK
    06.08.2021 10:20
    +1

    Хочу сказать спасибо за такие хорошие продукты и за то что даете бесплатно лицензии опенсорс разработчикам.

    По поводу улучшений, это больше относится к самой Intellij Idea UE, хотелось бы чтобы gradle не качался на каждый проект по отдельности, а скачивалась каждая версия в кэш папку и от туда использовалась. Бывают случаи что градл в новой версии глючит и нужно откатываться, уже ~200мб скачивает. Бывает нужно сделать просто проект для теста и снова закачка градл, когда он уже есть во всех проектах. Это занимает много времени если интернет очень плохой.

    Вижу это так, ide проверяет есть ли в папке настроек нужная версия градла и если есть берет локально, если нет то уже закачивает в папку настроек и от туда уже берут все проекты из всех ide которые используют градл


    1. artspb
      06.08.2021 10:34

      Уточню у коллег. А пока они смотря, хотел бы поинтересоваться: а почему вы не используете wrapper?


      1. YouROK
        06.08.2021 10:52

        Я в gradle так сказать новичок, особо не разбирался что там и как. Вот я открыл проект Kotlin Desktop в idea. Попытался обновить компос на альфа версию, а там ошибка пошел читать гугл, говорят что тоже была такая проблема и решилось новой версией градл, прописал версию и пошла загрузка. Это мне ide уже показала что загружается. В итоге ждал минут 20. Проблема не решилась.

        Решил сделать проект с нуля, создалась структура проекта и началась закачка градл и снова ждать.

        Что предлагает ide то и использую, враппер видел когда-то в андроид студио кажись, но не разбирался что там и к чему.

        Пока писал, вспомнил про еще одну хотелку, которая сегодня и пришла в голову. Пока решал проблему менял скрипт в градле и был момент когда, скопировал часть скрипта на груви из инета и вставил в котлин скрипт градл. Подумал, а было бы неплохо как в редакторе, вставил ява код и он автоматом перевел в котлин, может и тут также можно решить?


        1. svartalfar
          09.08.2021 18:12
          +1

          Если вы используете настройки по-умолчанию, то IDEA будет использовать технологию Gradle Wrapper. В ней дистрибутив Gradle будет скачан и распакован в домашний каталог (по-умолчанию ~/.gradle/wrapper/dists ) и будет переиспользоваться для проектов с такой же версией.

          К сожалению, если версия Gradle в проекте отличается от скачанных ранее хоть чуть-чуть: минорной версией или типом дистрибутива (*-bin или *-all), дистрибутив придётся скачивать заново.


  1. alex__m
    06.08.2021 10:25
    +1

    Подскажите планируется ли улучшение поддержки Apple M1? Сейчас ваши продукты заметно подтормаживают, даже на уровне отрисовки интерфейса.


    1. artspb
      06.08.2021 10:32

      А вы используете версию для M1 или через Rosetta 2?


      1. alex__m
        06.08.2021 13:50

        да, использую M1 версию. Работает приемлемо, но есть пожелания ускорить интерфейс


        1. artspb
          06.08.2021 14:32

          Самое близкое, что я нашел, это IDEA-261592. Если похоже на вашу проблему, то стоит за тикет проголосовать, а в комментариях поделиться своим сценарием - возможно, у коллег возникнут дополнительные вопросы. Если у вас что-то другое, то будет здорово, если вы заведете тикет с описанием (в идеале, со скринкастом) и логами. Тогда можно будет уже разбираться с конкретной проблемой.


  1. inpogudin
    06.08.2021 15:47

    На Мак2019Pro обновление крашется.


    1. s0xzwasd
      06.08.2021 16:07

      С какой версии пытаетесь обновиться? Появляются какие-либо ошибки при обновлении?


      1. k2rick
        06.08.2021 20:06

        Да, стоило указать детали: обновление прошло без проблем, на старте выдается отчет для Apple

        Process: goland [4203] Path: /Applications/GoLand.app/Contents/MacOS/goland Identifier: com.jetbrains.goland Version: 2021.2 (GO-212.4746.93) Code Type: X86-64 (Native) Parent Process: ??? [1] Responsible: goland [4203] User ID: 501

        Date/Time: 2021-08-06 20:03:55.421 +0300 OS Version: macOS 11.5 (20G71) Report Version: 12 Bridge OS Version: 5.5 (18P4759a)


        1. s0xzwasd
          06.08.2021 20:55

          Спасибо. Очень похоже на проблему IDEA-274515. Попробуйте, пожалуйста, переустановить GoLand полностью, скачав 2021.2 со страницы загрузок (системную папку и где хранятся настройки удалять не нужно).