Привет, Хабр!  Чуть больше недели назад мы выпустили новую версию нашей IDE для Go — GoLand 2020.1. Если кратко, в этот релизный цикл мы сфокусировались над расширением текущей поддержки Go Modules. Например, в файле go.mod теперь работают автодополнение кода, рефакторинги и навигация, и это далеко не все!  Другим направлением стала борьба с шаблонным кодом и рутиной. Мы добавили множество новых видов автодополнения. Причем часть из них работает автоматически, не требуя вызова комбинаций клавиш. Другая часть расширила текущий набор автодополнений Smart Code Completion и Basic Code Completion.  Не обошлось и без новых инспекций, улучшений для отладчика, поддержки изменений из Go 1.14 и множества других, прочитать о которых можно ниже. Кстати, узнать о новой функциональности можно и в интерактивной форме — пройдя прямо в IDE урок Features of GoLand 2020.1. Мы поддержали переменные окружения GOPROXY, GOPRIVATE, GOSUMDB, GONOPROXY и GONOSUMB из версии Go 1.13. Устанавливайте значения для них в шаблоне проекта Go Modules. Нажмите иконку Browse в поле Environment, чтобы открыть новое окно Environment Variables. Мы добавили автодополнение для операторов go, module, require, replace, exclude, и локальных путей в replace директивах для файла go.mod. Переименовывайте и перемещайте директории, указанные внутри операторов replace, с помощью Move и Rename рефакторингов. Чтобы узнать, где используется путь к конкретной директории в файле go.mod, вызовите Find Usages в Project View. Загружайте недостающие зависимости и удаляйте неиспользуемые на лету с помощью Alt-Enter. И, наконец, новая версия предупредит вас перед коммитом файла go.mod с локальными путями в replace-директиве. GoLand 2020.1 предложит if err != nil { ... } для завершения обработки ошибок. Просто напишите if внутри выражения. Определяйте структуры и типы интерфейсов, указав ключевое слово type или struct и interface. Fill Fields добавляет пробелы после двоеточия, когда этого требуют правила форматирования. Это действие также автоматически поставит запятую в конце выражения с объявлением составных литералов. При создании словарей автодополнение кода переместит курсор за закрывающую скобку, после того как вы укажете тип ключа. Для типа возвращаемого значения функции автодополнение кода теперь предлагает локальные переменные и нулевые значения, которые соответствуют типу возвращаемого значения. Умное автодополнение кода предлагает указатель для структур с инициализаторами полей. Кроме того, теперь автодополнение в первую очередь предложит совместимые типы для утверждения типа и переключателя типа. Для утверждения типа автодополнение кода предложит тип присваиваемой переменной. Наконец, GoLand 2020.1 предложит варианты автодополнения для указателей в выражении. Basic Code Completion для комментариев значительно упрощает написание документации. Автодополнение предлагает имена для текущих объявлений пакета и имена параметров для функций и методов. Кроме того, Basic Code Completion теперь предлагает литералы и преобразования. При написании сигнатуры функции, возвращающей несколько значений, GoLand 2020.1 добавит скобки вокруг типов возвращаемого значения, если после первого типа вы поставите запятую. Когда вы вставляете текст в строковый литерал, IDE экранирует текст. Чтобы узнать больше о функциях редактирования кода, которые работают автономно, то есть не требуя от пользователя никаких действий, прочтите статью GoLand Editing Features You Didn’t Know About (на английском). В Go 1.14 добавилась поддержка встраивания перекрывающих интерфейсов, и мы сразу же их поддержали! Когда вы описываете различные аспекты типа, использующего перекрывающие интерфейсы, GoLand не будет предупреждать о дублировании методов. Вендоринг включается автоматически в версии Go 1.14, если корень модуля содержит директорию vendor. Для GoLand 2020.1 мы решили реализовать аналогичное поведение для версии 1.13 и более ранних. IDE будет автоматически разрешать импорт в директорию vendor, если она присутствует в модуле. Поддержка ярлыков профилировщика помогает быстрее ориентироваться между горутинами и анализировать дампы памяти. Подробнее об этом в статье How to Find Goroutines During Debugging (на английском). Используйте макросы в качестве параметров для запуска и отладки приложения. В диалоге Run/Debug Configurations нажмите + в полях Go Tool или Program arguments, чтобы открыть новый диалог Macros со списком доступных макросов.  Кроме того, теперь вы можете сохранять файлы с конфигурациями в проекте. Выберите опцию Store в верхней части диалога Run/Debug Configurations. Шаблон .else добавляет оператор if для проверки того, не является ли выражение ложным. Измените вызов без форматирования на вызов с форматированием с помощью Alt+Enter. Быстрое исправление Create variable теперь предлагает подсказку ожидаемого типа, чтобы ускорить ввод правильного значения. Эта новая инспекция предупреждает о недопустимых вызовах методов с получателем-указателем на значениях, которые не являются указателями. Для обнаруженной проблемы предлагается быстрое исправление. Проверка Invalid conversions of uintptr to unsafe.Pointer предупредит о потенциально опасном преобразовании между uintptr и unsafe.Pointer для преобразования целых чисел в указатели. Проверка Unmarshal is called with incorrect argument анализирует вызовы json.Unmarshal и похожих функций из encoding/json, encoding/xml и encoding/gob пакетов. Locks mistakenly passed by value помогает избежать случайного копирования значений типа sync.Locker. Шаблоны consts, vars, types и imports помогут вам быстро создавать группы объявлений. При использовании одного из этих шаблонов GoLand добавит скобки вокруг имени объявления. Шаблон fori вставляет код для классического for-loop. Рефакторинг Extract Method сохраняет исходный порядок родительской функции и параметры метода. Rename автоматически определяет переименование объявления. Теперь, когда вы переименовываете объявление вручную, IDE покажет иконку в поле редактора. Нажав на иконку, вы переименуете все использования разом. 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. Спасибо, что дочитали до конца! Будем рады вашим отзывам и постараемся ответить на любые вопросы. Пишите нам здесь в комментариях, в Twitter или в баг-трекер. Также приглашаем вас в канал #goland-gophers в Slack англоязычного сообщества Go. Команда JetBrains GoLand The Drive to Develop