工具简介
Go 代码格式化工具会把 Go 源码整理成整个 Go 社区通用的标准风格。粘贴一个文件或一段代码,就能得到 gofmt 风格的缩进、空格、import 分组,以及对齐的结构体字段和注释。
工具运行的是 Go 工具链里真正的 gofmt,编译成了 WebAssembly,没有任何近似处理。这里看到的结果就是 go fmt 会写出的内容,格式化后的代码提交上去不会在 CI 里产生差异。
使用方法
- 粘贴 Go 代码,或打开一个
.go文件。 - 输入的同时,右侧就会显示格式化后的代码。
- 要提交到仓库的代码请保留 制表符 缩进;如果代码要放进文档、幻灯片,或者放到制表符显示过宽的网站上,可以选 2 个空格 或 4 个空格。
- 复制或下载结果。
如果代码无法解析,工具会显示第一个错误及其行号和列号,例如 expected ')', found '{',点击就能跳到出错的那一行。
示例
示例是一个被尽量挤到最少行数里的小程序:import 用分号隔开,结构体写在两行里,函数里的运算符两边没有空格。格式化之后:
- import 变成带括号的代码块,每行一个包;
- 结构体字段各占一行,字段类型对齐成一列;
if u.Age<18{变成if u.Age < 18 {,函数体换到下一行;- 复合字面量里的逗号和冒号后面补上空格。
gofmt 会改什么,不会改什么
gofmt 只调整排版。它不会重命名标识符、调整声明顺序,也不会删除没用到的 import,这些是 goimports 和 go vet 之类工具的工作。对于有意义的换行,gofmt 会保留原样,比如你特意拆成多行的长参数列表仍然保持多行。
注释会被保留,并跟着周围的代码一起重新缩进。连续几行末尾的注释会像结构体字段一样对齐成一列。
小技巧
- 格式化也是找缺失括号的快捷办法:错误位置通常指向出错处之后的第一行。
- 在 issue 或代码评审里贴代码之前先格式化一下,评审的人就能把注意力放在代码逻辑上,而不是排版。
- 在编辑器里配合 gopls 打开“保存时格式化”,本地文件就会始终和这里的输出保持一致。
常见问题
› 这是真正的 gofmt 吗?
是的。格式化程序就是 Go 工具链里的 gofmt 源码,编译成 WebAssembly 后在浏览器里运行,结果和在本机执行 `gofmt` 或 `go fmt` 完全一致。
› 代码里必须有 package 声明吗?
不必须。完整的文件效果最好,但 gofmt 也能处理只有几个函数或几条语句的片段,从博客或聊天记录里复制来的代码可以直接粘贴。
› 为什么缩进用的是制表符?
gofmt 总是用制表符缩进、用空格对齐,这是 Go 社区的统一约定,编辑器可以按你喜欢的宽度显示制表符。如果要把代码放进文档或幻灯片,可以选 2 个或 4 个空格,工具只会替换行首的制表符。
› 我的代码会被上传吗?
不会。WebAssembly 模块只下载一次,格式化完全在浏览器本地完成。