使用gofmt格式化代碼

來源:互聯網
上載者:User

對於一門程式設計語言來說,代碼格式化是最容易引起爭議的一個問題,不同的開發人員可能會有不同的編碼風格和習慣,但是如果所有開發人員都能使用同一種格式來編寫代碼,開發人員就可以將寶貴的時間專註在語言要解決的問題上。

gofmt介紹

Golang的Team Dev制定了統一的官方代碼風格,並且推出了gofmt工具(gofmt或go fmt)來協助開發人員格式化他們的代碼到統一的風格。gofmt是一個cli程式,會優先讀取標準輸入,如果傳入了檔案路徑的話,會格式化這個檔案,如果傳入一個目錄,會格式化目錄中所有.go檔案,如果不傳參數,會格式化目前的目錄下的所有.go檔案。

gofmt預設不對代碼進行簡化,使用-s參數可以開啟簡化代碼功能,具體來說會進行如下的轉換:

  • 去除數組、切片、Map初始化時不必要的型別宣告:
如下形式的切片運算式:    []T{T{}, T{}}將被簡化為:    []T{{}, {}}
  • 去除數組切片操作時不必要的索引指定
如下形式的切片運算式:    s[a:len(s)]將被簡化為:    s[a:]
  • 去除迭代時非必要的變數賦值
如下形式的迭代:    for x, _ = range v {...}將被簡化為:    for x = range v {...}如下形式的迭代:    for _ = range v {...}將被簡化為:    for range v {...}

gofmt命令參數列表如下:

usage: gofmt [flags] [path ...]  -cpuprofile string        write cpu profile to this file  -d    display diffs instead of rewriting files  -e    report all errors (not just the first 10 on different lines)  -l    list files whose formatting differs from gofmt's  -r string        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')  -s    simplify code  -w    write result to (source) file instead of stdout

可以看到,gofmt命令還支援自訂的重寫規則,使用-r參數,按照pattern -> replacement的格式傳入規則。

有如下內容的Golang程式,儲存在main.go檔案中。

package mainimport "fmt"func main() {   a := 1   b := 2   c := a + b   fmt.Println(c)}

用以下規則來格式化上面的代碼。

gofmt -r "a + b -> b + a"

格式化的結果如下。

package mainimport "fmt"func main() {   a := 1   b := 2   c := b + a   fmt.Println(c)}

*注意:Gofmt使用tab來表示縮排,並且對行寬度無限制,如果手動對代碼進行了換行,gofmt也不會強制把代碼格式化回一行。

go fmt和gofmt

gofmt是一個獨立的cli程式,而go中還有一個go fmt命令,go fmt命令是gofmt的簡單封裝。

usage: go fmt [-n] [-x] [packages]Fmt runs the command 'gofmt -l -w' on the packages namedby the import paths. It prints the names of the files that are modified.For more about gofmt, see 'go doc cmd/gofmt'.For more about specifying packages, see 'go help packages'.The -n flag prints commands that would be executed.The -x flag prints commands as they are executed.To run gofmt with specific options, run gofmt itself.See also: go fix, go vet.

go fmt命令本身只有兩個選擇性參數-n和-x,-n僅列印出內部要執行的go fmt的命令,-x命令既列印出go fmt命令又執行它,如果需要更細化的配置,需要直接執行gofmt命令。

go fmt在調用gofmt時添加了-l -w參數,相當於執行了gofmt -l -w

goland中配置gofmt

Goland是JetBrains公司推出的Go語言IDE,是一款功能強大,使用便捷的產品。

在Goland中,可以通過添加一個File Watcher來在檔案發生變化的時候調用gofmt進行代碼格式化,具體方法是,點擊Preferences -> Tools -> File Watchers,點加號添加一個go fmt模版,Goland中預置的go fmt模版使用的是go fmt命令,將其替換為gofmt,然後在參數中增加-l -w -s參數,啟用代碼簡化功能。添加配置後,儲存源碼時,goland就會執行代碼格式化了。

參考文章

https://golang.org/cmd/gofmt/

https://golang.org/doc/effective_go.html

https://openhome.cc/Gossip/Go/gofmt.html

https://github.com/hyper0x/go_command_tutorial/blob/master/0.9.md

點擊關注知乎專欄Golang私房菜

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.