DevToolPal
繁

Go 程式碼格式化

用編譯成 WebAssembly 的 gofmt,在你的瀏覽器中格式化 Go 原始碼。

本機處理,不會上傳

選項

縮排

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

功能簡介

Go 程式碼格式化工具會把 Go 原始碼改寫成整個 Go 社群通用的唯一標準風格。貼上一個檔案或一段程式碼,就會得到 gofmt 的縮排、空白、import 分組,以及對齊的 struct 欄位和註解。

它執行的是 Go 工具鏈中真正的 gofmt,並編譯成 WebAssembly。沒有任何近似處理:你在這裡看到的,就是 go fmt 會寫出的內容,因此格式化後的程式碼提交後不會在 CI 中產生差異。

使用方法

  1. 貼上 Go 程式碼,或開啟一個 .go 檔案。
  2. 格式化後的程式碼會隨著輸入即時顯示在右側。
  3. 要提交的程式碼請保留 Tab 縮排。如果程式碼要放進文件、簡報,或 Tab 顯示過寬的網站,請選 2 個空格 或 4 個空格。
  4. 複製或下載結果。

如果程式碼無法解析,工具會顯示第一個錯誤及其行號和欄號,例如 expected ')', found '{',你可以直接跳到那一行。

範例

範例是一個盡可能擠在最少行數裡的小程式:import 用分號分隔、struct 寫成兩行,函式中的運算子兩邊沒有空格。格式化之後:

  • import 會變成加上括號的區塊,每行一個套件;
  • struct 欄位各占一行,型別對齊成一欄;
  • if u.Age<18{ 會變成 if u.Age < 18 {,函式本體則換到自己的一行;
  • 複合字面值在逗號和冒號後面補上空格。

gofmt 會改與不會改的地方

gofmt 只調整排版。它絕不會重新命名識別字、調整宣告順序或移除未使用的 import;這些是 goimports 和 go vet 這類工具的工作。它也會保留有意義的換行,所以你特意拆成多行的長參數清單仍然會維持多行。

註解會被保留,並隨著周圍的程式碼重新縮排。連續幾行結尾的註解會像 struct 欄位一樣對齊成一欄。

小技巧

  • 格式化是找出缺少的大括號的快速方法:錯誤位置通常指向出錯處之後的第一行。
  • 在 issue 或程式碼審查中分享程式碼之前,先格式化一下。審查者就能專注在程式碼做了什麼,而不是它長什麼樣子。
  • 在你的編輯器中搭配 gopls 開啟「存檔時格式化」,你的檔案就會一直與這裡的輸出一致。

常見問題

› 這是真正的 gofmt 嗎?

是的。格式化程式就是 Go 工具鏈中的 gofmt 程式碼,編譯成 WebAssembly,因此輸出結果與你在自己電腦上執行 `gofmt` 或 `go fmt` 的結果逐位元組相同。

› 需要有 package 宣告嗎?

不需要。完整的檔案效果最好,但 gofmt 也接受一串宣告或幾行敘述,從部落格文章或聊天中複製來的程式碼片段可以直接用。

› 為什麼用 Tab 縮排?

gofmt 一律用 Tab 縮排、用空格對齊。這是 Go 的慣例,編輯器可以用你喜歡的寬度顯示 Tab。如果要把程式碼放進文件或簡報而需要空格,請選擇 2 或 4 個空格,只有行首的 Tab 會被替換。

› 我的程式碼會被上傳嗎?

不會。WebAssembly 模組只會下載一次,格式化在你的瀏覽器本機執行。