「GoCN酷Go推薦」更嚴(yán)格的代碼格式化工具 gofumpt
#?前言?#
gofmt 是 golang 自帶的代碼自動格式化工具,是保證 Go 代碼風(fēng)格一致的大殺器。我們這次要推薦的 gofumpt 在 gofmt 的基礎(chǔ)上添加了一系列更加嚴(yán)格的格式化規(guī)則,并保證了對 gofmt 的兼容。
gofumpt 有助于進(jìn)一步提升代碼質(zhì)量,它已經(jīng)成為 gopls(Go 官方語言服務(wù))中可選的格式化工具以及 golangci-lint 中支持的 linter,正在被越來越多優(yōu)秀的開源項目(sourcegraph、gitlab 等)所使用。
#?gofumpt 簡介?#
gofumpt(https://github.com/mvdan/gofumpt) fork 自 gofmt,支持與 gofmt 幾乎相同的命令行參數(shù),因此可以作為 gofmt 的直接替代品使用。gofumpt 是 gofmt 的“超集”,經(jīng)過 gofumpt 格式化的代碼也符合 gofmt 的要求,其本身所擴(kuò)展的格式化規(guī)則也可能在后續(xù)被集成進(jìn) gofmt。
gofumpt 有以下特點(diǎn):
更多的格式化規(guī)則(參見 https://github.com/mvdan/gofumpt#Added-rules) 默認(rèn)跳過對 vendor 的格式化 不對自動生成的代碼應(yīng)用擴(kuò)展規(guī)則 不支持 -r 參數(shù)
以上第 2、3 個特性對于格式化整個 go 工程來說尤其友好,在格式化代碼的同時可以避免對自動生成代碼(mock、proto 等)的入侵!
#?使用舉例?#
安裝 gofumpt:
go?install?mvdan.cc/gofumpt@latest
gofumpt 的用法與 gofmt 用法非常類似,使用過 gofmt 的同學(xué)上手會非常容易。gofumpt 的格式化規(guī)則擴(kuò)展很多,下面只取幾個典型的例子進(jìn)行介紹:
注:以下例子均不會被 gofmt(1.17.2) 格式化
賦值運(yùn)算符后不能有空行
package?demo
func?foo()?{
?foo?:=
??"bar"
}
格式化后:
package?demo
func?foo()?{
?foo?:=?"bar"
}
簡單的錯誤檢查之前不能有空行
package?demo
foo,?err?:=?processFoo()
if?err?!=?nil?{
?return?err
}
格式化后:
package?demo
foo,?err?:=?processFoo()
if?err?!=?nil?{
?return?err
}
標(biāo)準(zhǔn)庫的導(dǎo)入必須位于頂部的單獨(dú)組中
package?demo
import?(
?"foo.com/bar"
?"io"
?"io/ioutil"
)
格式化后:
package?demo
import?(
?"io"
?"io/ioutil"
?"foo.com/bar"
)
代碼簡化標(biāo)志(-s)默認(rèn)啟用
package?demo
var?_?=?[][]int{[]int{1}}
格式化后:
package?demo
var?_?=?[][]int{{1}}
更多的例子請大家參考 https://github.com/mvdan/gofumpt#Added-rules
編輯器集成
gofumpt 除了作為命令行工具直接使用之外,還可以集成到編輯器中供我們使用,例如在 vscode 中集成 gofumpt 只需要以下配置:
"go.useLanguageServer":?true,
"gopls":?{
?"formatting.gofumpt":?true,
},
更多的編輯器集成請參考 https://github.com/mvdan/gofumpt#installation
# 總結(jié)?#
gofumpt 是一款優(yōu)秀的 go 代碼格式化擴(kuò)展工具,能夠幫助我們進(jìn)一步提升代碼質(zhì)量,來試試看吧!
# 參考資料?#
https://github.com/mvdan/gofumpt https://golangci-lint.run/usage/linters/
歡迎加入 GOLANG 中國社區(qū):https://gocn.vip
《酷Go推薦》招募:
各位Gopher同學(xué),最近我們社區(qū)打算推出一個類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個庫或者好的項目,然后寫一點(diǎn)這個庫使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到
新的庫,并且知道怎么用。
大概規(guī)則和每日新聞類似,如果報名人多的話每個人一個月輪到一次,歡迎大家報名!戳「閱讀原文」,即可報名
掃碼也可以加入 GoCN 的大家族喲~
