




go fmt 是 gofmt 工具的封装别名,仅按 Go 官方规范重排代码结构(缩进、换行等),不改逻辑、不处理 import 或未使用变量,且无视任何配置文件,规则硬编码。
go fmt 不是一个独立命令,而是 gofmt 工具的封装别名。它只做一件事:按 Go 官方风格规范重排代码结构(缩进、空格、换行、括号位置等),不改逻辑、不加注释、不调整命名。它不处理 import 排序或未使用变量——那是 goimports 或 golangci-lint 的事。

最常用方式是终端执行:
go fmt ./...
这会递归格式化当前模块下所有 .go 文件。注意三点:
./... 表示“当前目录及所有子目录下的包”,不是通配符,不能写成 *.go
gofmt(也就是 go fmt)**完全无视任何配置文件**。它的规则硬编码在 Go 源码中,比如:
-tabwidth=8)你无法通过配置让它用 4 空格缩进,也不能禁用某类重排。所谓“配置”,只能靠外部工具补充,例如:
goimports -w . 替代 go fmt 来自动管理 import 分组"gopls": { "formatting.gofumpt": true } 启用更严格的 gofumpt
gofumpt -l 检查而非修改,避免误提交VS Code 和 GoLand 默认调用 gopls 提供格式化服务,但行为取决于配置项:
"editor.formatOnSave": true 开启"go.formatTool" 值:设为 "gofumpt" 可获得比原生 gofmt 更激进的清理(如删空行、合并连续声明)gofumpt,需先 go install mvdan.cc/gofumpt@latest,否则保存时会静默失败真正容易被忽略的是:编辑器格式化和 CLI 的 go fmt 不一定等价。比如 gopls 默认启用 formatting.gofumpt 时,它调用的是 gofumpt,不是 gofmt —— 这会导致本地保存和 CI 执行 go fmt ./... 结果不一致。