За долгое время работы в Golang Dev я увидел, что многие мои коллеги не обращают внимания на правильный порядок сортировки своих зависимостей (импорта) в проектах. Я считаю, что это происходит из-за того, что существующие инструменты, такие как goimports, или даже встроенные функции IDE не могут дать точный инструмент для этого. Вот почему мы должны контролировать и исправлять это вручную, когда возникает такая ситуация, и грустно выполнять такие вещи, которые могут быть выполнены автоматически.

Давайте посмотрим на практике, что у нас есть ... В приведенном ниже примере мы видим, что библиотеки std были разделены пробелами в строке №6.

Это проблема по умолчанию, которую мы можем получить, например, после слияния двух разных веток. Пробелы между библиотеками std сделают наш код как минимум некрасивым, а иногда и непонятным, особенно при проверке кода. Имея такую ​​проблему внутри блока импорта, мы не можем исправить существующие инструменты Golang. Более ужасная ситуация следующая:

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

Решение такой проблемы находится здесь:



Что делает инструмент и почему он лучше других? В основном, используя AST и внутренние правила для сортировки, он полностью перестраивает блок import и записывает изменения в исходный файл (по умолчанию он будет записывать все изменения в исходный файл, но если вам нужно, вы можете распечатать все изменения в stdout используя опцию -output stdout). Поместите исходный файл для исправления с опцией -file-path вашего проекта и все.

Доступные Варианты:

  -file-path string
        File path to fix imports(ex.: ./reviser/reviser.go). Required parameter.
  -project-name string
        Your project name(ex.: github.com/incu6us/goimports-reviser). Optional parameter.
  -local string
        Local package prefixes which will be placed after 3rd-party group(if defined). Values should be comma-separated. Optional parameters.
  -output string
        Can be "file" or "stdout". Whether to write the formatted content back to the file or to stdout. Optional parameter. (default "file")
  -rm-unused
        Remove unused imports. Optional parameter.
  -set-alias
        Set alias for versioned package names, like 'github.com/go-pg/pg/v9'. In this case import will be set as 'pg "github.com/go-pg/pg/v9"'. Optional parameter.

Чтобы установить инструмент в своей системе, вы можете выбрать brew для пользователей Mac, snap для пользователей Linux или изначально для Go с использованием go get.

Заварочная установка:

brew tap incu6us/homebrew-tap
brew install goimports-reviser

Установка Snap:

snap install goimports-reviser

При установке go get:

go get github.com/incu6us/goimports-reviser

И последнее, что вам нужно сделать, это настройка внутри вашей любимой IDE. Вот пример моего любимого плагина file watchers:

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

Удачного кодирования!