Привет, Хабр!
Вышло первое крупное обновление GoLand 2021.1. Традиционно расскажем о новом в релизе и покажем, как пользоваться новой функциональностью.
Если совсем коротко, теперь вы можете:
собирать и запускать программы на удаленном окружении: Docker, SSH и WSL 2;
использовать новую функциональность Go 1.16 (например, //go:embed);
мгновенно генерировать код из JSON;
с легкостью обрабатывать ошибки с помощью новых быстрых исправлений;
обсуждать код и обмениваться новыми знаниями с помощью сервиса для совместной разработки и парного программирования Code With Me.
Но, это конечно, не все!
Кстати, если вы работаете с базами данных, а также с JavaScript и TypeScript, то последние обновления DataGrip и WebStorm уже включены в этот релизный билд (впрочем, как и всегда). Да, GoLand – это больше, чем просто IDE для Go.
И последнее, новую функциональность можно попробовать в интерактивной форме. Урок What's New in GoLand 2021.1 уже ждет вас на начальном экране.
Run Targets
В этом релизе команда работала над одним из самых ожидаемых обновлений — возможностью собирать и запускать программу на удаленном окружении Docker, SSH и WSL2 прямо из IDE.
Немного теории: добавить нужное окружение можно через меню Run | Edit Configurations. В открывшемся диалоге выбираете нужную конфигурацию, а в выпадающем списке Run on указываете окружение, на котором хотите запустить свой код.
Скоро выйдет серия постов о том, как настраивать и запускать программы на удаленном окружении в нашем официальном блоге (на англ.). Не пропустите!
А пока будем рады видеть вас в нашей документации.
Go 1.16
Поддержка //go:embed
Новости из мира Go 1.16: теперь можно встраивать файлы и папки на этапе компиляции программы в виде string (строки), []byte (слайса байтов), или с помощью embed.FS встроить сразу несколько директорий.
GoLand предоставляет подсветку кода, навигацию от директивы embed к файлам и папкам в проекте, рефакторинг Rename, Find usages (поиск использований), автодополнение кода и несколько инспекций. Например, GoLand предупредит вас, если вы попытаетесь вставить файл в переменную неправильного типа.
Обнаружение некорректного использования (t/b).Fatal
GoLand предупреждает о недопустимых вызовах testing.T метода Fatal внутри горутины, созданной во время теста.
Быстрое исправление перепишет код с вызовом t.Fatal (или аналогичного метода) так, чтобы он предупреждал о сбое теста с помощью t.Error и досрочно выходил из горутины с помощью оператора возврата (return).
Обнаружение некорректного использования asn1.Unmarshal
В Go 1.16 go vet находит неправильное использование asn1.Unmarshal и проверяет, что переменная, в которую выполняется демаршалинг (слайса байтов), не равна nil.
В GoLand 2021.1 есть аналогичная проверка с быстрым исправлением для решения этой проблемы.
Работа с JSON
Чтобы создать структуру с полями и тегами из JSON, в GoLand 2021.1 нужно просто скопировать данные в редактор кода. Это все :)
Если вы хотите отредактировать 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.
Если вы вставили невалидный JSON-код в окно Generate Go type from JSON, GoLand вам об этом скажет.
Теперь гораздо проще создавать теги 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 внутри значений тегов.
GoLand теперь поддерживает формат JSON Lines, в котором каждая запись находится на отдельной строке. Он используется для работы со структурированными данными и логами. IDE распознает типы файлов .jsonl, .jslines, .ldjson и .ndjson.
Файлы этих форматов содержат по несколько строк. Каждая из них является JSON-объектом и отделяется символом переноса строки. Запятые в начале и конце строки не обязательны, и вы можете не заключать содержимое файла в квадратные или фигурные скобки.
Обработка ошибок
Про обработку ошибок в Go можно найти множество статей с комментарием “не так уж просто, как казалось”. Мы верим в то, что наша IDE должна делать жизнь пользователей проще, поэтому мы добавили инспекцию Unhandled Error уже несколько лет назад. А чтобы жизнь была не только проще, но и веселей, теперь у этой инспекции появилось несколько быстрых исправлений:
Handle error присваивает результаты вызова переменным и создает проверку if error != nil.
Wrap error handling in a closure, для операторов defer и go, создает код, похожий на Handle error, но при этом оборачивает весь код в анонимную функцию (closure).
Ignore explicitly теперь сработает с defer и go. Быстрое исправление присваивает результаты вызова пустым переменным и оборачивает выражение в замыкание.
Новые быстрые исправления
Быстрое исправление несовместимости типов внутри составных литералов
Быстрое исправление для ошибки совместимости типов поддерживает больше сценариев. Теперь оно также предложит реализовать интерфейс и преобразовать его в ожидаемый тип внутри составных литералов.
Быстрое исправление Create Type
Create Type теперь предлагает не только создать тип, который уже используется, но еще не определен, но и создаст поля для него.
Одновременная генерация set и get методов
Создание методов get и set для каждого поля в длинной структуре не подходит под определение увлекательной задачи. Чтобы избавить вас от утомительной рутины, GoLand 2021.1 может cгенерировать все необходимые геттеры и сеттеры для выбранной структуры сразу.
Нажмите Alt+Enter на любом имени поля в структуре и выберите Generate getter and setters из выпадающего меню. GoLand откроет окно Select Fields, где вы можете выбрать методы get и set для всех полей или каких-то конкретных.
Мы понимаем, что генерация геттеров и сеттеров в большинстве случаев не нужна в Go, но если вдруг у вас будет такая задача, вы знаете как ее решить быстро :)
Рефакторинги
Extract Type
Extract Type позволяет извлечь тип из существующего или преобразовать анонимный тип структуры в именованный. Чтобы вызвать рефакторинг, нажмите Ctrl+Alt+Shift+T на Windows или Ctrl+T на macOS.
Rename модуля (go.mod)
Случается так, что иногда нужно переименовать имя модуля. Чтобы переименование происходило быстро и безболезненно, мы добавили поддержку рефакторинга Rename в go.mod файлах. Поддержка позволяет переименовать модуль без необходимости поиска по всему дереву проекта для замены имени.
Вызовите Rename на имени модуля с помощью Shift+F6 на Windows/Linux или ?F6 на macOS. GoLand откроет окно Rename, где можно изменить имя, настроить параметры переименования в комментариях и строках, и посмотреть предварительный результат рефакторинга. Из вкладки Refactoring Preview вы можете перейти ко всем использованиям этого имени модуля. Если результат рефакторинга вас не устроит, все изменения можно отменить.
Постфиксное автодополнение
Постфиксное автодополнение varCheckError
Введите .varCheckError после выражения, возвращающего ошибку. IDE добавит имена переменных, проверку if error != nil и вернет ошибку из функции.
Форматирование
Встроенный форматер теперь может группировать импорт точно так же, как это делает goimports -local.
Чтобы использовать эту функциональность, перейдите в Preferences/Settings | Editor | Code Style | Go | Imports и включите опцию группировки импортов. Теперь вы можете выбрать импорты, которые будут сгруппированы в отдельные блоки.
Инструмент для совместного редактирования кода
Сервис для совместной разработки и парного программирования Code With Me, который мы уже анонсировали в предыдущем релизе, поменял статус EAP на релизный и теперь работает в GoLand по умолчанию, без необходимости устанавливать плагин.
Что появилось в этой версии:
возможность гибко настраивать уровень доступа к проекту;
возможность общаться по видео и аудио, переписываться в мессенджере.
Кстати, чтобы присоединиться к сеансу и работать вместе с вами, даже не обязательно устанавливать GoLand.
Если у вашей компании повышенные требования к безопасности, можно установить локальную версию Code With Me и пользоваться сервисом в пределах внутренней сети.
Чуть больше о безопасности можно почитать в нашей документации.
На этой странице можно узнать, что именно входит в вашу лицензию.
Запуск и отладка с повышенными привилегиями
GoLand 2021.1 позволяет запускать расширенную sudo сессию. При первом запуске GoLand спросит, хотите ли вы, чтобы сессия продолжалась или прекращала свое выполнение немедленно. В Preferences/Settings | Appearance & Behavior | System Settings | Process Elevation всегда можно изменить свой ответ.
Пожалуйста, обратите внимание, что при включении этой опции вы предоставляете GoLand и всем сторонним плагинам расширенный доступ к вашей системе.
Автодополнение кода
Появилось автодополнение на основе машинного обучения (ML). Эта функциональность находится на ранней стадии разработки и является альтернативой стандартному механизму ранжирования.
Выберите Mark position changes in the completion popup в Preferences/Settings | Editor | General | Code Completion, чтобы опции автодополнения, ранжированные с помощью ML, были отмечены иконками стрелок вверх/вниз в выпадающем меню.
Улучшения пользовательского интерфейса
Меню быстрого доступа
Виджет Configuration, который ранее был доступен в левом нижнем углу IDE, теперь находится в правом верхнем углу. Нажмите значок шестеренки, чтобы переключить тему, изменить сочетания клавиш, перейти к плагинам или открыть настройки IDE.
Быстрый доступ к недавним проектам на Windows через меню 'Пуск'
Кликните правой кнопкой мыши на иконку GoLand в меню Пуск на Windows, чтобы открыть недавний проект.
Улучшенные всплывающие подсказки
Всплывающие подсказки теперь отображаются одна за другой и не накладываются друг на друга.
Шрифты
Мы добавили больше вариантов шрифтов в Preferences/Settings | Editor | Font.
Другие изменения
Предварительный просмотр HTML-файлов
Мы добавили встроенное превью для HTML-файлов. Все изменения, которые вы вносите в HTML-файлы, а также в соответствующие CSS и JavaScript-файлы, мгновенно сохраняются, а превью обновляется в реальном времени в редакторе.
Чтобы его открыть, нажмите на значок GoLand в виджете в правом верхнем углу редактора.
Раскрытие вкладок в режиме разделенного редактора
Необходимо больше места при работе с несколькими файлами одновременно в режиме разделенного редактора? Дважды щелкните на вкладку, с которой вы работаете, чтобы развернуть ее в окне редактора. Чтобы вернуть окно в прежнее состояние, снова кликните по нему дважды.
Плагин Makefile Language
Плагин Makefile Language для поддержки языка GNU Make теперь включен в IDE. Благодаря Виктору Кропп в GoLand 2021.1 вы найдете все необходимое: подсветку кода, быстрый просмотр документации, Find Usages, навигацию и автодополнение.
Вот и все на сегодня! Идеи для улучшений мы часто берем из ваших отзывов и предложений. Пишите нам здесь в комментариях, в наш баг-трекер или Twitter.
По традиции напоминаю, что если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, если установить этот плагин.
Спасибо за внимание!
Blogoslov
А планируется ли такой режим как в VsCode когда IDE работает в Windows а проект в нем берется из Linux (через ssh соединение)? И ты кодишь в IDE на винде, а на самом деле все файлы находятся на удаленом Linux хочте.
artspb
Планируется, но пока непонятно, когда именно мы это сделаем. Голосовать можно за GO-10618.
Blogoslov
не — у меня не WSL случай, интересует именно через SSH тк в моем случае Linux система самостоятельная и удаленная, а не совмещенная с Windows как в предалагемой вами ссылке
artspb
Ну, тут принципиальный момент — научить IDE работать с SDK, который находится где-то в другом месте, и запускать команды там же. Если мы это сделаем для WSL, то половина дела для SSH будет сделана. Вторая половина — это сурцы на удаленное машине. Работу с ними без копирования на локальную в ближайшее время ждать вряд ли стоит. Все-таки IDE нужно строить индексы, а делать это по сети очень медленно. Это решаемая задача, но в контексте GoLand мы пока в эту сторону не смотрим.