- 格式化 import 部分:分3段式,依默认为
标准库
、第三方库
、项目自身库
- 格式化单行注释:若为
//注释内容
,调整为//{空格}注释内容
- 默认只对git项目库里有修改的进行格式化
- 支持将多行的 copyright 注释修改为单行格式(默认不调整)
- 简化代码
对于 import 部分:
1.可使用
-mi
参数来控制是否将多段import合并为一段(默认否)。
2.对于注释的import path,会按照其实际路径参与分组和排序。
3.对于非末行的注释的位置会和其下面紧挨的import path绑定在一起。
4.末行的注释则会放入import的头部。
5.import path 不要使用相对路径(如./
和../
)。
会忽略当前目录以及子目录下的 testdata
和 vendor
目录。
若需要可进入其目录里执行该命令。
export GO111MODULE=on
go env GOPROXY=https://goproxy.cn,direct
go install github.com/fsgo/go_fmt@master
升级 Go 版本后,请用最新版本 go 重新安装/更新 go_fmt
。
go_fmt -help
usage: go_fmt [flags] [path ...]
-d display diffs instead of rewriting files
-df string
display diffs format, support: text, json (default "text")
-ig string
import group sort rule,
stc: Go Standard pkgs, Third Party pkgs, Current ModuleByFile pkg
sct: Go Standard pkgs, Current ModuleByFile pkg, Third Party pkgs
(default "stc")
-local string
put imports beginning with this string as 3rd-party packages (default "auto")
-mi
merge imports into one
-s simplify code (default true)
-slcr
multiline copyright to single-line
-trace
show trace infos
-w write result to (source) file instead of stdout (default true)
$ go_fmt
$ go_fmt ./...
$ go_fmt abc.go
编辑项目的 .git/hooks/pre-commit
文件,将go_fmt
命令加入。
方式1:
echo -e '\ngo_fmt\n' >> $(git rev-parse --git-dir)/hooks/pre-commit
chmod 777 $(git rev-parse --git-dir)/hooks/pre-commit
方式2:
wget https://raw.githubusercontent.com/fsgo/go_fmt/master/pre-commit -O $(git rev-parse --git-dir)/hooks/pre-commit
chmod 777 $(git rev-parse --git-dir)/hooks/pre-commit
该方式会导致项目自身的 hooks 失效。
若项目有自己的 hooks,请不要配置全局而要配置到单个项目。
mkdir -p ~/.git_config/hooks/
git config --global core.hooksPath ~/.git_config/hooks/
wget https://raw.githubusercontent.com/fsgo/go_fmt/master/pre-commit -O ~/.git_config/hooks/pre-commit
chmod 777 ~/.git_config/hooks/pre-commit