Перейти на все исходное дерево
У меня есть проект, в настоящее время организованный примерно так:
~ / Код / перейти / бен / упак / 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 ./...
не делает.