跳到主要内容

Go 格式化工具

API reference

格式化并美化 Go 源代码——根据大括号和括号深度使用制表符缩进,遵循 Go 强制要求的左大括号同行放置,对无歧义的运算符和逗号进行空格规范化,复合字面量中冒号的空格处理,以及可选的标准库与第三方 import 排序,同时将原始 `backtick` 字符串和注释按字节原样保留。

输入

Drop a file or browse
One file · text
或

格式化选项

输出

格式化后的 Go 代码
 
这对您有帮助吗?

使用此工具的更多方式

REST API

curl -X POST https://api.iotools.cloud/v1/tool/go-formatter \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "goInput": "package main\n\nimport (\n\"fmt\"\n\"os\"\n\"github.com/sp…",
    "sortImports": "true"
  }'

替换成您账户中的密钥。工具的字段即为请求体——没有额外包装。

让 AI 代理执行

Use the IOTools `go-formatter` tool (Go Formatter) on this input:

YOUR_INPUT_HERE

将此粘贴给任何已连接 IOTools MCP 服务器的代理,再加上您的输入内容。

嵌入式小组件

<iframe
  src="https://iotools.cloud/embed/go-formatter/"
  width="100%" height="520" frameborder="0" scrolling="no" loading="lazy"
  title="Go 格式化工具 — iotools.cloud"
  sandbox="allow-scripts allow-forms allow-same-origin allow-downloads allow-popups allow-popups-to-escape-sandbox"
  allow="clipboard-write"
  style="width:100%;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden"></iframe>
<script src="https://iotools.cloud/embed.js" async></script>

把它放到您自己的页面上——免费,无需密钥,只需保留一个反向链接。

每次 API/MCP 调用费用5 积分起
需要更多积分?查看定价

也可通过

使用指南

粘贴杂乱的 Go 代码,即刻在浏览器中获得符合 gofmt 规范的整洁源代码。Go 格式化工具使用制表符重新缩进,将每个左大括号移到它所属的 if/for/func/struct 所在的同一行,整理运算符和逗号周围的空格,还可以将 import 排序并分组为标准库和第三方两组——同时完全不改动原始的 `反引号` 字符串和注释。

为什么用制表符,为什么大括号从不移动

Go 格式中有两点并不只是风格选择,而是语言本身的约定。缩进始终使用制表符,而不是空格——本工具不提供空格选项,因为 gofmt 也不提供。左大括号保持在它所属关键字的同一行:Go 会在行尾自动插入分号,因此单独一行的 { 可能会悄悄改变代码的含义,而不仅仅是外观。本工具总会把多余的大括号合并回上一行。

使用方法

粘贴你的 Go 源代码,或上传 .go 文件。如果想将 import 块重新排列为标准库和第三方两组(每组按字母顺序排序),请开启 排序并分组 import。复制结果,或将其下载为 formatted.go。在你输入或更改选项时,格式化会自动运行。

规范化的内容

  • 缩进 — 使用制表符,依据大括号和括号的嵌套深度。case/default 相对于其 switch 主体缩进一级。
  • 大括号位置 — 单独一行的 { 总会合并到上一行。
  • 运算符空格 — 无歧义的二元运算符两侧各加一个空格::=、==、!=、<=、>=、&&、||、<<、>>、&^、= 以及复合赋值形式。
  • 逗号和分号空格 — 前面不加空格,后面加一个空格。
  • 复合字面量中的冒号 — User{Name:"x"} 变为 User{Name: "x"},而切片和索引中的冒号保持紧凑(s[1:3])。这是真正的消歧,而非猜测:工具会在整个文件中跟踪最内层未闭合括号的类型,只有当该括号为 { 时才为冒号加空格,遇到 [ 则绝不加。
  • struct{、interface{ 以及无括号的语句头(if x > 0{、for i := range xs{)在大括号前加空格,函数签名如 func f() error{ 同样如此。
  • import 排序(可选)— 标准库和第三方两组,每组按字母顺序排序,并以空行分隔。
  • 空行 — 连续空行压缩为最多一行,{ 之后和 } 之前不保留空行,并在顶层 func/type/var/const 之前恰好插入一行空行。

刻意保留不动的内容

  • 一元与二元的 +、-、*、&,以及通道运算符 <-(发送时为二元,接收时为紧凑的一元前缀)。区分它们需要真正的语法解析,因此它们现有的空格保持不变。
  • 换行 — 绝不会将内容重新排版为比你提供的更多或更少的行。
  • 字符串内部的任何内容。 原始 `...` 字符串按**字节原样**保留——包括换行、缩进、大括号和冒号——因为它们常用于 SQL 和模板。结构体标签(`json:"name"`)内部同样不做改动。
  • 注释。 // 和 /* */ 注释,包括多行块注释,都会原样复制。

与 gofmt 相同吗?

不相同——它是一个无依赖的文本格式化工具,完全在你的浏览器中运行,而不是真正的 Go 解析器。gofmt 会构建完整的语法树;本工具则处理经过词法切分的文本,无需安装 Go 即可得到正确的制表符、正确的大括号位置和合理的空格。

我的代码是私密的吗?

完全私密。所有格式化都在你的浏览器本地完成——你的源代码从不会发送到服务器、被记录或存储。

gogolanggofmtcode formatterbeautifyindenttabsimports

喜欢这些工具?去掉广告吧。

一次性付款即可永久移除您账户中的所有广告。无需订阅,不追踪。