Перейти на все исходное дерево

У меня есть проект, в настоящее время организованный примерно так:

~ / Код / перейти
         / бен
         / упак
         / SRC
             /proj/main.go
                  /some_package/package.go
                  /some_other_package/some_other_package.go

Теперь, если я хочу использовать go fmt инструмент для всего моего проекта, кажется, что единственный способ сделать это отдельно для каждого каталога в исходном дереве моих проектов:

go fmt proj
go fmt proj/package
go fmt proj/some_other_package

Есть ли какой-нибудь способ заставить команду fmt работать на всем дереве исходных текстов?

4 ответа

Решение

Вы можете использовать три точки (...) как подстановочный знак. Например, следующая команда отформатирует все пакеты github.com:

go fmt github.com/...

Этот подстановочный знак также работает с другими командами go, такими как go list, go get так что. Нет необходимости запоминать такую ​​уродливую команду поиска.

Если вы используете gofmt вместо go fmtрекурсивно. Например, следующая команда

gofmt -s -w .

(обратите внимание на маленькую точку в конце) рекурсивно форматирует, упрощает и сохраняет результат в каждом файле в текущем каталоге. У меня есть псевдоним оболочки gf определяется как gofmt -s -w . и найти это очень удобно.

Пытаться gofmt -l . (перечислите файлы, форматирование которых отличается от формата gofmt), если хотите:-)

Также вы можете попробовать запустить команду:

go fmt ./...

из каталога вашего проекта.

find proj -type f -iregex '.*\.go' -exec go fmt '{}' +

объяснение

  • find proj: найти все в этом каталоге...
    • -type f: ... это файл
    • -iregex '.*\.go': ... и регистронезависимо совпадает с регулярным выражением .*\.go
  • ... и выполнить go fmt затем столько сопоставленных файлов, сколько операционная система может обработать, передавая исполняемый файл за один раз.

Если вы используете GoLand IDE, щелкните проект правой кнопкой мыши, и вы найдете Go Tools. https://stackru.com/images/e7b208412f62e36fa1d1c7372a4f7276360d21a3.png

Команда gofmt ./... упомянутый некоторыми, не работает на Windows (по крайней мере на моем Win7).

Вместо этого я использовал gofmt -d .\ который работает рекурсивно. Я использую -d флаг, потому что я хочу перечислить изменения, которые мне нужно сделать, чтобы пройти проверку.

NB: golint ./... работает на Windows, просто gofmt ./... не делает.

Другие вопросы по тегам