DevToolPal
简

Go 代码格式化

用编译成 WebAssembly 的 gofmt 在浏览器里格式化 Go 代码。

本地处理,不上传

选项

缩进

输入

0 字符 · 0 B

输出

0 字符 · 0 B

工具简介

Go 代码格式化工具会把 Go 源码整理成整个 Go 社区通用的标准风格。粘贴一个文件或一段代码,就能得到 gofmt 风格的缩进、空格、import 分组,以及对齐的结构体字段和注释。

工具运行的是 Go 工具链里真正的 gofmt,编译成了 WebAssembly,没有任何近似处理。这里看到的结果就是 go fmt 会写出的内容,格式化后的代码提交上去不会在 CI 里产生差异。

使用方法

  1. 粘贴 Go 代码,或打开一个 .go 文件。
  2. 输入的同时,右侧就会显示格式化后的代码。
  3. 要提交到仓库的代码请保留 制表符 缩进;如果代码要放进文档、幻灯片,或者放到制表符显示过宽的网站上,可以选 2 个空格 或 4 个空格。
  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 模块只下载一次,格式化完全在浏览器本地完成。