Что нового в GoLand

GoLand 2021.1 позволяет запускать программы удаленно через Docker, SSH и WSL 2, использовать новую функциональность Go 1.16, включая //go:embed, мгновенно генерировать код из JSON, а также проще обрабатывать ошибки с помощью новых быстрых исправлений.

Поскольку GoLand больше, чем просто IDE для Go, помимо функций для работы с кодом Go, вы получите новые возможности для работы с JavaScript, TypeScript и базами данных.

Предпочитаете узнавать о новой функциональности в интерактивной форме? Пройдите урок What's New in GoLand 2021.1 на начальном экране.

Run Targets

Настройка удаленного окружения в окне 'Run Configuration'

В GoLand 2021.1 появилась возможность разрабатывать удаленно, не покидая IDE. На данный момент есть поддержка для Docker, SSH и WSL 2 (подсистема Windows для Linux).

Добавить нужное окружение можно с помощью меню Run | Manage Targets... — нажмите на иконку Add (+) и выберите один из типов окружения, которое вы хотите использовать. После завершения настройки вы можете использовать добавленное окружение в Run Configuration, выбрав соответствующее значение для поля Run on.

Go 1.16

Добавление папки к embed директиве

Поддержка //go:embed

В Go 1.16 можно встраивать файлы и папки на этапе компиляции программы.

Embedding works on a few types of variables: string, []byte, and embed.FS. Переменные должны быть объявлены на верхнем уровне пакета. Последнее, что нужно сделать — добавить директиву //go:embed.

GoLand предоставляет подсветку кода, навигацию от директивы embed к файлам и папкам в проекте, Rename рефакторинг, Find usages, автодополнение кода и несколько инспекций. Например, GoLand предупредит вас, если вы попытаетесь вставить файл в переменную неправильного типа.

Замена метода 'Fatal' на 'Error' через быстрое исправление

Обнаружение некорректного использования (t/b).Fatal

GoLand предупреждает о недопустимых вызовах testing.T метода Fatal внутри горутины, созданной во время теста.

Быстрое исправление перепишет код с вызовом t.Fatal (или аналогичного метода) так, чтобы он предупреждал о сбое теста с помощью t.Error и досрочно выходил из горутины с помощью оператора возврата.

IDE показывает предупреждение о потенциальной ошибке и предлагает быстрое исправление

Обнаружение некорректного использования asn1.Unmarshal

В Go 1.16 go vet находит неправильное использование asn1.Unmarshal и проверяет, что переменная, в которую выполняется демаршалинг (слайс байтов), не равна nil.

В GoLand 2021.1 есть аналогичная проверка с быстрым исправлением для решения этой проблемы.

Работа с JSON

Копирование данных JSON в редактор кода

Создавайте структуру с полями и тегами из JSON, просто скопировав данные в редактор кода.

Если вы хотите отредактировать JSON перед созданием структуры, нажмите Alt+Enter, чтобы вызвать действие Generate type from JSON . GoLand откроет окно Generate Go type from the JSON с уже скопированным туда JSON. Вы можете изменить данные по своему усмотрению в этом окне, затем нажать кнопку Generate, и ваша структура появится в редакторе. Также можно вставить JSON в окно вручную.

Кроме того, можно преобразовать JSON внутри уже существующей пустой структуры. Для этого щелкните на эту пустую структуру и вызовите действие Generate struct fields from JSON, нажав Alt+Enter или используя меню Generate.

Также GoLand уведомит вас, если вы используете недопустимый код JSON в окне Generate Go type from JSON.

Создание структуры из данных JSON c помощью окна 'Generate Go type from JSON'

Теперь гораздо проще создавать теги JSON и XML для всех экспортируемых полей в структуре.

Когда вы используете Alt+Enter для вызова Add key to tags в структуре или на ее поле, GoLand добавит тег ко всем полям с именами. Если вы хотите изменить стиль имени поля для всех тегов, нажмите Alt+Enter еще раз на любом ключе и выберите Change field name style in tags. Поддерживаются следующие стили: fieldName, FieldName, field-name, и field_name.

Вы можете обновлять все значения тегов одновременно с помощью действия Update key value in tags. Нажмите Alt+Enter на любом значении тега в структуре, и GoLand добавит курсоры в конце значений тега каждому полю.

Кроме того, у IDE есть автодополнение для токенов JSON, XML и ASN.1 внутри значений тегов.

JSON файл в новом виде

GoLand теперь поддерживает формат JSON Lines, в котором каждая запись находится на отдельной строке. Он используется для работы со структурированными данными и логами. IDE распознает типы файлов .jsonl, .jslines, .ldjson и .ndjson.

Файлы этих форматов содержат по несколько строк. Каждая из них является JSON-объектом и отделяется символом переноса строки. Запятые в начале и конце строки не обязательны, и вы можете не заключать содержимое файла в квадратные или фигурные скобки.

Обработка ошибок

Инспекция кода 'Unhandled Error' предупреждает о потенциальной ошибке, быстрое исправление 'Wrap error handling in a closure' исправляет проблемное место

Инспекция кода Unhandled Error получила несколько быстрых исправлений:

  • Handle error присваивает результаты вызова переменным и создает проверку if error != nil.
  • Wrap error handling in a closure (доступен для операторов defer и go) создает код, похожий на Handle error, но при этом оборачивает весь код в функцию замыкания (closure).
  • Ignore explicitly теперь сработает с defer и go. Быстрое исправление присваивает результаты вызова пустым переменным и оборачивает выражение в замыкание.

Новые быстрые исправления

Быстрое исправление для ошибки совместимости типов меняет ошибочно использованный byte на строку

Быстрое исправление несовместимости типов внутри составных литералов

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

Создание типа со всеми необходимыми полями с помощью нового быстрого исправления

Быстрое исправление Create Type

Create Type теперь предлагает не только создать тип, который уже используется, но еще не определен, но и создаст поля для него.

Генерирование геттеров и сеттеров для структуры с помощью окна 'Select Fields'

Одновременная генерация set и get методов

Создание методов get and set для каждого поля в длинной структуре может быть утомительной задачей. GoLand 2021.1 может сразу cгенерировать все необходимые геттеры и сеттеры для выбранной структуры.

Нажмите Alt+Enter на любом имени поля в структуре и выберите Generate getter and setters из выпадающего меню. GoLand откроет окно Select Fields, где вы можете выбрать методы get и set для всех полей или каких-то конкретных.

Рефакторинги

Извлечение типа из структуры

Extract Type рефакторинг

Extract Type позволяет извлечь тип из существующего или преобразовать анонимный тип структуры в именованный. Чтобы вызвать рефакторинг, нажмите Ctrl+Alt+Shift+T.

Go модули

Переименование имени модуля с помощью 'Rename' рефакторинга

Rename для файла go.mod

Иногда нужно переименовать модуль, над которым вы работаете в данный момент. Чтобы переименование происходило быстро и безболезненно, мы добавили поддержку Rename рефакторинга в go.mod файлах. Поддержка позволяет переименовать модуль без необходимости поиска по всему дереву проекта для замены имени.

Вызовите Rename на имени модуля с помощью Shift+F6. GoLand откроет окно Rename, где можно изменить имя, настроить параметры переименования в комментариях и строках, и посмотреть предварительный результат рефакторинга. Из вкладки Refactoring Preview вы можете перейти ко всем использованиям этого имени модуля. Если результат рефакторинга вас не устроит, все изменения можно отменить.

Постфиксное автодополнение

Новое постфиксное автодополнение в действии

Постфиксное автодополнение varCheckError

Введите .varCheckError после выражения, возвращающего ошибку. IDE добавит имена переменных, проверку if error != nil и вернет ошибку из функции.

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

Настройки группировки импортов

Встроенный форматер теперь может группировать импорт точно так же, как это делает goimports -local.

Чтобы использовать эту функциональность, перейдите в Settings | Editor | Code Style | Go | Imports и включите опцию группировки импортов. Теперь вы можете выбрать импорты, которые будут сгруппированы в отдельные блоки.

Запуск и отладка

Настройки 'Process Elevation'

GoLand 2021.1 позволяет запускать расширенную sudo сессию. При первом запуске GoLand спросит, хотите ли вы, чтобы сессия продолжалась или прекращала свое выполнение немедленно. В Settings | Appearance & Behavior | System Settings | Process Elevation всегда можно изменить свой ответ.

Пожалуйста, обратите внимание, что при включении этой опции вы предоставляете GoLand и всем сторонним плагинам доступ к вашей системе.

Автодополнение кода

Варианты автодополнения в выпадающем меню c включенным ML автодополнением

Появилось автодополнение на основе машинного обучения (ML). Эта функциональность находится на ранней стадии разработки и является альтернативой стандартному механизму ранжирования.

Выберите Mark position changes in the completion popup в Settings | Editor | General | Code Completion, чтобы опции автодополнения, ранжированные с помощью ML, были отмечены иконками стрелок вверх/вниз в выпадающем меню.

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

Смена темы IDE через меню быстрого доступа

Меню быстрого доступа

Виджет Configuration, который ранее был доступен в левом нижнем углу IDE, был заменен меню быстрого доступа. Новое меню находится в правом верхнем углу. Нажмите значок шестеренки, чтобы переключить тему, изменить сочетания клавиш, перейти к плагинам или открыть настройки IDE.

Быстрый доступ к недавним проектам на Windows

Быстрый доступ к недавним проектам на Windows через меню 'Пуск'

Кликните правой клавишей мыши на иконку GoLand в меню Пуск на Windows, чтобы открыть недавний проект.

Новое отображение всплывающих подсказок

Улучшенные всплывающие подсказки

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

Настройки группировки импортов

Шрифты

Мы добавили больше вариантов шрифтов в Settings | Editor | Font.

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

Окно предварительного просмотра HTML-файлов

Предварительный просмотр HTML-файлов

Мы добавили встроенное превью для HTML-файлов. Все изменения, которые вы вносите в HTML-файлы, а также в соответствующие CSS- и JavaScript-файлы, мгновенно сохраняются, а превью обновляется в реальном времени.

Чтобы его открыть, нажмите на значок GoLand в виджете в правом верхнем углу редактора.

Изменение размера вкладки файла в редакторе

Раскрытие вкладок в режиме разделенного редактора

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

Установленный плагин 'Makefile Language' на странице 'Plugins' в IDE

Плагин Makefile Language

Плагин Makefile Language для поддержки языка GNU Make теперь работает по умолчанию. В GoLand 2021.1 вы найдете все необходимое: подсветку кода, быстрый просмотр документации, Find Usages, навигацию и автодополнение.

Code With Me

'Code With Me' в действии

Сервис для совместной разработки и парного программирования Code With Me теперь включен в GoLand.

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

Если у вашей компании повышенные требования к безопасности, можно установить локальную версию Code With Me и пользоваться сервисом в пределах внутренней сети.

Узнайте, входит ли Code With Me в вашу лицензию.

Docker

Автодополнение кода в поле 'Run Options'

Обновленные конфигурации запуска/отладки

Мы улучшили диалог Run/Debug Configuration:

  • Чтобы добавить необходимые параметры сборок, кликните на иконку Modify options. Чтобы добавить параметры запуска, кликните на иконку Modify. Теперь IDE проверяет каждый параметр, чтобы убедиться в его совместимости.
  • Для Docker Compose мы поддержали все существующие параметры, включая объявление Environmental variables files (.env).
  • Нет необходимости запоминать команды запуска, вы можете их выбрать из автодополнения в поле Run Options.
  • Также автодополнение кода появилось для имен образов в полях Image ID и name для Images.
IDE собирает образ с помощью BuildKit

Поддержка BuildKit

Мы добавили экспериментальную поддержку BuildKit для ускорения сборки проектов. Кликните Modify options и выберите Enable BuildKit (experimental) в Run/Debug Configurations.

Просто нажмите на иконку рядом с названием шага, и IDE соберет образ с помощью BuildKit. Если вы добавите запуск в Run/Debug Configurations, иконка изменится. Если вы кликните по ней, то вы не только соберете образ, но и запустите контейнер.

Свернутые этапы в редакторе

Обновленный UI для многоступенчатых Dockerfiles

Если вы используете несколько FROM в Dockerfile, каждая инструкция FROM будет запускать новый этап. В многоступенчатых Dockerfiles этапы четко отделены друг от друга и их можно сворачивать.

Остановка работы Docker с помощью новой иконки в окне Services

Отмена запуска Docker

Остановить запуск Dockerfile теперь можно в окне Services. Выберите запущенный элемент, вызовите контекстное меню и кликните Stop Deploy.

Автодополнение в окне 'Bind Mounts'

Переменные окружения и макросы при монтировании каталогов

При монтировании каталога как файловой системы теперь можно быстро указать путь к каталогу на хосте. Механизм автодополнения позволяет выбирать макросы и переменные окружения в поле Bind mount в окне Run/Debug Configurations.

Автодополнение кода для образов в Dockerfile

Автодополнение образов в Dockerfiles

Мы также добавили автодополнение кода для имен образов.

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

Всплывающая подсказка с документацией MDN в редакторе кода

Встроенная документация MDN

Мы интегрировали в GoLand документацию MDN. Больше не будет проблем с подключением к сайту MDN, а документация в HTML, CSS и JavaScript-файлах будет отображаться быстрее. Кроме того, документация стала более информативной: например, можно посмотреть подробную информацию о поддерживаемых версиях браузеров для API JavaScript.

Stylelint в действии с быстрым исправлением

Улучшенная поддержка Stylelint

Пользоваться популярным линтером Stylelint стало проще. Исправлять ошибки в CSS-коде теперь можно всего в несколько кликов. Наведите указатель мыши на проблемное место в файле или поместите туда курсор и нажмите Alt+Enter, а затем выберите Stylelint: Fix current file.

Кроме того, теперь можно указать путь к файлу конфигурации в соответствующем поле в разделе Settings | Languages & Frameworks | Style Sheets | Stylelint.

Всплывающее окно документации для селектора

Специфичность селекторов CSS

When working with style sheets, you can now check the specificity of your selectors – just hover over a selector that you want to check. Или переместите на него фокус и нажмите Ctrl+Q, чтобы просмотреть информацию во всплывающем окне документации.

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

Новое поле 'ORDER BY' в таблице

Улучшенная сортировка

Мы улучшили сортировку данных:

  • Новое поле ORDER BY работает аналогично полю WHERE (которое раньше называлось Filter): укажите грамматически верное предложение, и оно применится к запросу таблицы.
  • По умолчанию сортировки друг на друга не «накладываются»‎. Это значит, что при нажатии на столбец, по которому вы хотите отсортировать данные, сортировка на основе других столбцов будет отменена. Если вы хотите сделать наложение нескольких сортировок, нажмите на название колонки, удерживая клавишу Alt.
  • Если вы хотите использовать сортировку на стороне клиента (когда GoLand не выполняет запросы заново, а вместо этого сортирует данные на текущей странице), уберите галочку для опции Sort via ORDER BY.
  • Также можно открывать таблицы с заранее заданной сортировкой на основе числового первичного ключа.
'Select first N rows from a table' в редакторе

Контекстные шаблоны Live Templates

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

Select first N rows from a table выглядит как обычный шаблон (и может быть использован как таковой). Синтаксис шаблона подходит не для всех баз данных, потому к нему применяется соответсвующий диалект. Основное отличие, позволяющее применить этот шаблон в проводнике баз данных, — выражение dbObjectName, используемое для переменной $table$.

Назначение прав объекту через новое окно

Интерфейс для работы с правами доступа

Мы добавили интерфейс для изменения прав доступа при редактировании объектов.

В окне Modify user (вы можете открыть его из проводника баз данных для любого пользователя при помощи команды Ctrl+F6) появился интерфейс для назначения объектам прав доступа.

Функциональность доступна для PostgreSQL, Redshift, Greenplum, MySQL, MariaDB, DB2, SQL Server и Sybase.