功能簡介
Go 程式碼格式化工具會把 Go 原始碼改寫成整個 Go 社群通用的唯一標準風格。貼上一個檔案或一段程式碼,就會得到 gofmt 的縮排、空白、import 分組,以及對齊的 struct 欄位和註解。
它執行的是 Go 工具鏈中真正的 gofmt,並編譯成 WebAssembly。沒有任何近似處理:你在這裡看到的,就是 go fmt 會寫出的內容,因此格式化後的程式碼提交後不會在 CI 中產生差異。
使用方法
- 貼上 Go 程式碼,或開啟一個
.go檔案。 - 格式化後的程式碼會隨著輸入即時顯示在右側。
- 要提交的程式碼請保留 Tab 縮排。如果程式碼要放進文件、簡報,或 Tab 顯示過寬的網站,請選 2 個空格 或 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 模組只會下載一次,格式化在你的瀏覽器本機執行。