Привет, Хабр!
Вышло первое крупное обновление GoLand 2021.1. Традиционно расскажем о новом в релизе и покажем, как пользоваться новой функциональностью.
![](https://habrastorage.org/getpro/habr/upload_files/a4d/62e/564/a4d62e564f22c07b42add61022a46d11.png)
Если совсем коротко, теперь вы можете:
собирать и запускать программы на удаленном окружении: 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.
![](https://habrastorage.org/getpro/habr/upload_files/8ae/b10/5df/8aeb105dff7651905d2cab7ef57c5d1f.png)
Немного теории: добавить нужное окружение можно через меню Run | Edit Configurations. В открывшемся диалоге выбираете нужную конфигурацию, а в выпадающем списке Run on указываете окружение, на котором хотите запустить свой код.
Скоро выйдет серия постов о том, как настраивать и запускать программы на удаленном окружении в нашем официальном блоге (на англ.). Не пропустите!
А пока будем рады видеть вас в нашей документации.
Go 1.16
Поддержка //go:embed
Новости из мира Go 1.16: теперь можно встраивать файлы и папки на этапе компиляции программы в виде string (строки), []byte (слайса байтов), или с помощью embed.FS встроить сразу несколько директорий.
GoLand предоставляет подсветку кода, навигацию от директивы embed к файлам и папкам в проекте, рефакторинг Rename, Find usages (поиск использований), автодополнение кода и несколько инспекций. Например, GoLand предупредит вас, если вы попытаетесь вставить файл в переменную неправильного типа.
![](https://habrastorage.org/getpro/habr/upload_files/d1f/861/71b/d1f86171b4bfe409ee8a9f0aa3f9fb9f.png)
Обнаружение некорректного использования (t/b).Fatal
GoLand предупреждает о недопустимых вызовах testing.T метода Fatal внутри горутины, созданной во время теста.
Быстрое исправление перепишет код с вызовом t.Fatal (или аналогичного метода) так, чтобы он предупреждал о сбое теста с помощью t.Error и досрочно выходил из горутины с помощью оператора возврата (return).
![](https://habrastorage.org/getpro/habr/upload_files/68e/c84/25c/68ec8425c1662bc54f39f117d6edd34e.gif)
Обнаружение некорректного использования asn1.Unmarshal
В Go 1.16 go vet находит неправильное использование asn1.Unmarshal и проверяет, что переменная, в которую выполняется демаршалинг (слайса байтов), не равна nil.
В GoLand 2021.1 есть аналогичная проверка с быстрым исправлением для решения этой проблемы.
![](https://habrastorage.org/getpro/habr/upload_files/156/2cb/d1c/1562cbd1c649953311a3657e23bff1b2.gif)
Работа с 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 вам об этом скажет.
![](https://habrastorage.org/getpro/habr/upload_files/ae0/97f/e44/ae097fe445a6b6e82ea4969f74a188a1.gif)
Теперь гораздо проще создавать теги 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 внутри значений тегов.
![](https://habrastorage.org/getpro/habr/upload_files/45b/ef1/249/45bef1249ce4c8b4cb2a24a3a4699020.gif)
GoLand теперь поддерживает формат JSON Lines, в котором каждая запись находится на отдельной строке. Он используется для работы со структурированными данными и логами. IDE распознает типы файлов .jsonl, .jslines, .ldjson и .ndjson.
Файлы этих форматов содержат по несколько строк. Каждая из них является JSON-объектом и отделяется символом переноса строки. Запятые в начале и конце строки не обязательны, и вы можете не заключать содержимое файла в квадратные или фигурные скобки.
![](https://habrastorage.org/getpro/habr/upload_files/4f7/89f/005/4f789f0055701aaa5fe6cb90412b24e3.png)
Обработка ошибок
Про обработку ошибок в Go можно найти множество статей с комментарием “не так уж просто, как казалось”. Мы верим в то, что наша IDE должна делать жизнь пользователей проще, поэтому мы добавили инспекцию Unhandled Error уже несколько лет назад. А чтобы жизнь была не только проще, но и веселей, теперь у этой инспекции появилось несколько быстрых исправлений:
Handle error присваивает результаты вызова переменным и создает проверку if error != nil.
Wrap error handling in a closure, для операторов defer и go, создает код, похожий на Handle error, но при этом оборачивает весь код в анонимную функцию (closure).
Ignore explicitly теперь сработает с defer и go. Быстрое исправление присваивает результаты вызова пустым переменным и оборачивает выражение в замыкание.
![](https://habrastorage.org/getpro/habr/upload_files/ca9/5f7/8c2/ca95f78c216e85bc33e8eebe92db2fa6.gif)
Новые быстрые исправления
Быстрое исправление несовместимости типов внутри составных литералов
Быстрое исправление для ошибки совместимости типов поддерживает больше сценариев. Теперь оно также предложит реализовать интерфейс и преобразовать его в ожидаемый тип внутри составных литералов.
![](https://habrastorage.org/getpro/habr/upload_files/fce/247/444/fce247444933c727687cf9fe3f7c599c.gif)
Быстрое исправление Create Type
Create Type теперь предлагает не только создать тип, который уже используется, но еще не определен, но и создаст поля для него.
![](https://habrastorage.org/getpro/habr/upload_files/a09/ec8/a98/a09ec8a986773dc75115b3f14811efbb.gif)
Одновременная генерация set и get методов
Создание методов get и set для каждого поля в длинной структуре не подходит под определение увлекательной задачи. Чтобы избавить вас от утомительной рутины, GoLand 2021.1 может cгенерировать все необходимые геттеры и сеттеры для выбранной структуры сразу.
Нажмите Alt+Enter на любом имени поля в структуре и выберите Generate getter and setters из выпадающего меню. GoLand откроет окно Select Fields, где вы можете выбрать методы get и set для всех полей или каких-то конкретных.
![](https://habrastorage.org/getpro/habr/upload_files/92a/331/476/92a331476f1547c3ea0b27233eb855d1.gif)
Мы понимаем, что генерация геттеров и сеттеров в большинстве случаев не нужна в Go, но если вдруг у вас будет такая задача, вы знаете как ее решить быстро :)
Рефакторинги
Extract Type
Extract Type позволяет извлечь тип из существующего или преобразовать анонимный тип структуры в именованный. Чтобы вызвать рефакторинг, нажмите Ctrl+Alt+Shift+T на Windows или Ctrl+T на macOS.
![](https://habrastorage.org/getpro/habr/upload_files/60b/f7e/9c1/60bf7e9c1196411933163c58516dcc27.gif)
Rename модуля (go.mod)
Случается так, что иногда нужно переименовать имя модуля. Чтобы переименование происходило быстро и безболезненно, мы добавили поддержку рефакторинга Rename в go.mod файлах. Поддержка позволяет переименовать модуль без необходимости поиска по всему дереву проекта для замены имени.
Вызовите Rename на имени модуля с помощью Shift+F6 на Windows/Linux или ?F6 на macOS. GoLand откроет окно Rename, где можно изменить имя, настроить параметры переименования в комментариях и строках, и посмотреть предварительный результат рефакторинга. Из вкладки Refactoring Preview вы можете перейти ко всем использованиям этого имени модуля. Если результат рефакторинга вас не устроит, все изменения можно отменить.
![](https://habrastorage.org/getpro/habr/upload_files/9e4/0dd/72a/9e40dd72a8dcbd7224eac9fb504db003.gif)
Постфиксное автодополнение
Постфиксное автодополнение varCheckError
Введите .varCheckError после выражения, возвращающего ошибку. IDE добавит имена переменных, проверку if error != nil и вернет ошибку из функции.
![](https://habrastorage.org/getpro/habr/upload_files/5f8/9b0/a1d/5f89b0a1d504186b1aac4d080fe1a27a.gif)
Форматирование
Встроенный форматер теперь может группировать импорт точно так же, как это делает goimports -local.
Чтобы использовать эту функциональность, перейдите в Preferences/Settings | Editor | Code Style | Go | Imports и включите опцию группировки импортов. Теперь вы можете выбрать импорты, которые будут сгруппированы в отдельные блоки.
![](https://habrastorage.org/getpro/habr/upload_files/dbb/81a/674/dbb81a6743f901c944767675423f0f8d.png)
Инструмент для совместного редактирования кода
Сервис для совместной разработки и парного программирования Code With Me, который мы уже анонсировали в предыдущем релизе, поменял статус EAP на релизный и теперь работает в GoLand по умолчанию, без необходимости устанавливать плагин.
Что появилось в этой версии:
возможность гибко настраивать уровень доступа к проекту;
возможность общаться по видео и аудио, переписываться в мессенджере.
Кстати, чтобы присоединиться к сеансу и работать вместе с вами, даже не обязательно устанавливать GoLand.
Если у вашей компании повышенные требования к безопасности, можно установить локальную версию Code With Me и пользоваться сервисом в пределах внутренней сети.
Чуть больше о безопасности можно почитать в нашей документации.
На этой странице можно узнать, что именно входит в вашу лицензию.
![](https://habrastorage.org/getpro/habr/upload_files/775/91a/d3f/77591ad3f94f88d4d80e2b4dba7f3cef.png)
Запуск и отладка с повышенными привилегиями
GoLand 2021.1 позволяет запускать расширенную sudo сессию. При первом запуске GoLand спросит, хотите ли вы, чтобы сессия продолжалась или прекращала свое выполнение немедленно. В Preferences/Settings | Appearance & Behavior | System Settings | Process Elevation всегда можно изменить свой ответ.
Пожалуйста, обратите внимание, что при включении этой опции вы предоставляете GoLand и всем сторонним плагинам расширенный доступ к вашей системе.
![](https://habrastorage.org/getpro/habr/upload_files/1aa/e1b/2ff/1aae1b2ff1a5785dab18bd892b651b07.png)
Автодополнение кода
Появилось автодополнение на основе машинного обучения (ML). Эта функциональность находится на ранней стадии разработки и является альтернативой стандартному механизму ранжирования.
Выберите Mark position changes in the completion popup в Preferences/Settings | Editor | General | Code Completion, чтобы опции автодополнения, ранжированные с помощью ML, были отмечены иконками стрелок вверх/вниз в выпадающем меню.
![](https://habrastorage.org/getpro/habr/upload_files/03c/8a2/6be/03c8a26be14c5453e90fab6a95b050f3.png)
Улучшения пользовательского интерфейса
Меню быстрого доступа
Виджет Configuration, который ранее был доступен в левом нижнем углу IDE, теперь находится в правом верхнем углу. Нажмите значок шестеренки, чтобы переключить тему, изменить сочетания клавиш, перейти к плагинам или открыть настройки IDE.
![](https://habrastorage.org/getpro/habr/upload_files/48f/769/92e/48f76992e5df61d6bd945732352b7661.png)
Быстрый доступ к недавним проектам на Windows через меню 'Пуск'
Кликните правой кнопкой мыши на иконку GoLand в меню Пуск на Windows, чтобы открыть недавний проект.
![](https://habrastorage.org/getpro/habr/upload_files/a10/a40/d5d/a10a40d5ddd98a072fbe83affd4812a0.png)
Улучшенные всплывающие подсказки
Всплывающие подсказки теперь отображаются одна за другой и не накладываются друг на друга.
![](https://habrastorage.org/getpro/habr/upload_files/b34/029/3c2/b340293c24bb8820f6c60ffb863a7355.gif)
Шрифты
Мы добавили больше вариантов шрифтов в Preferences/Settings | Editor | Font.
![](https://habrastorage.org/getpro/habr/upload_files/bbe/85b/5f7/bbe85b5f77e81170f2004b879cef9534.png)
Другие изменения
Предварительный просмотр HTML-файлов
Мы добавили встроенное превью для HTML-файлов. Все изменения, которые вы вносите в HTML-файлы, а также в соответствующие CSS и JavaScript-файлы, мгновенно сохраняются, а превью обновляется в реальном времени в редакторе.
Чтобы его открыть, нажмите на значок GoLand в виджете в правом верхнем углу редактора.
![](https://habrastorage.org/getpro/habr/upload_files/aaf/e64/949/aafe6494939a76d1a4e7ecd13f3b0566.gif)
Раскрытие вкладок в режиме разделенного редактора
Необходимо больше места при работе с несколькими файлами одновременно в режиме разделенного редактора? Дважды щелкните на вкладку, с которой вы работаете, чтобы развернуть ее в окне редактора. Чтобы вернуть окно в прежнее состояние, снова кликните по нему дважды.
![](https://habrastorage.org/getpro/habr/upload_files/ec5/13f/15c/ec513f15c3bb509830d472a9e5fa3ad9.gif)
Плагин Makefile Language
Плагин Makefile Language для поддержки языка GNU Make теперь включен в IDE. Благодаря Виктору Кропп в GoLand 2021.1 вы найдете все необходимое: подсветку кода, быстрый просмотр документации, Find Usages, навигацию и автодополнение.
![](https://habrastorage.org/getpro/habr/upload_files/fc8/0c9/eaf/fc80c9eafa0a9cd803c4ea3345ef5685.png)
Вот и все на сегодня! Идеи для улучшений мы часто берем из ваших отзывов и предложений. Пишите нам здесь в комментариях, в наш баг-трекер или 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 мы пока в эту сторону не смотрим.