新聞中心
對于一門編程語言來說,代碼格式化是最容易引起爭議的一個問題,不同的開發(fā)者可能會有不同的編碼風(fēng)格和習(xí)慣,但是如果所有開發(fā)者都能使用同一種格式來編寫代碼,那么開發(fā)者就可以將主要精力放在語言要解決的問題上,從而節(jié)省開發(fā)時間。

龍江網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),龍江網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為龍江近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的龍江做網(wǎng)站的公司定做!
gofmt 介紹
Go語言的開發(fā)團(tuán)隊制定了統(tǒng)一的官方代碼風(fēng)格,并且推出了 gofmt 工具(gofmt 或 go fmt)來幫助開發(fā)者格式化他們的代碼到統(tǒng)一的風(fēng)格。
gofmt 是一個 cli 程序,會優(yōu)先讀取標(biāo)準(zhǔn)輸入,如果傳入了文件路徑的話,會格式化這個文件,如果傳入一個目錄,會格式化目錄中所有 .go 文件,如果不傳參數(shù),會格式化當(dāng)前目錄下的所有 .go 文件。
gofmt 默認(rèn)不對代碼進(jìn)行簡化,使用
-s參數(shù)可以開啟簡化代碼功能,具體來說會進(jìn)行如下的轉(zhuǎn)換:
1) 去除數(shù)組、切片、Map 初始化時不必要的類型聲明
如下形式的切片表達(dá)式:
[]T{T{}, T{}}
簡化后的代碼為:
[]T{{}, {}}
2) 去除數(shù)組切片操作時不必要的索引指定
如下形式的切片表達(dá)式:
s[a:len(s)]
簡化后的代碼為:
s[a:]
3) 去除循環(huán)時非必要的變量賦值
如下形式的循環(huán):
for x, _ = range v {...}
簡化后的代碼為:
for x = range v {...}
如下形式的循環(huán):
for _ = range v {...}
簡化后的代碼為:
for range v {...}
gofmt 命令參數(shù)如下表所示:
| 標(biāo)記名稱 | 標(biāo)記描述 |
|---|---|
| -l | 僅把那些不符合格式化規(guī)范的、需要被命令程序改寫的源碼文件的絕對路徑打印到標(biāo)準(zhǔn)輸出。而不是把改寫后的全部內(nèi)容都打印到標(biāo)準(zhǔn)輸出。 |
| -w | 把改寫后的內(nèi)容直接寫入到文件中,而不是作為結(jié)果打印到標(biāo)準(zhǔn)輸出。 |
| -r | 添加形如“a[b:len(a)] -> a[b:]”的重寫規(guī)則。如果我們需要自定義某些額外的格式化規(guī)則,就需要用到它。 |
| -s | 簡化文件中的代碼。 |
| -d | 只把改寫前后內(nèi)容的對比信息作為結(jié)果打印到標(biāo)準(zhǔn)輸出。而不是把改寫后的全部內(nèi)容都打印到標(biāo)準(zhǔn)輸出。 命令程序?qū)⑹褂?diff 命令對內(nèi)容進(jìn)行比對。在 Windows 操作系統(tǒng)下可能沒有 diff 命令,需要另行安裝。 |
| -e | 打印所有的語法錯誤到標(biāo)準(zhǔn)輸出。如果不使用此標(biāo)記,則只會打印每行的第 1 個錯誤且只打印前 10 個錯誤。 |
| -comments | 是否保留源碼文件中的注釋。在默認(rèn)情況下,此標(biāo)記會被隱式的使用,并且值為 true。 |
| -tabwidth | 此標(biāo)記用于設(shè)置代碼中縮進(jìn)所使用的空格數(shù)量,默認(rèn)值為 8。要使此標(biāo)記生效,需要使用“-tabs”標(biāo)記并把值設(shè)置為 false。 |
| -tabs | 是否使用 tab('\t')來代替空格表示縮進(jìn)。在默認(rèn)情況下,此標(biāo)記會被隱式的使用,并且值為 true。 |
| -cpuprofile | 是否開啟 CPU 使用情況記錄,并將記錄內(nèi)容保存在此標(biāo)記值所指的文件中。 |
可以看到 gofmt 命令還支持自定義的重寫規(guī)則,使用
-r參數(shù),按照 pattern -> replacement 的格式傳入規(guī)則。
【示例】有如下內(nèi)容的 Golang 程序,存儲在 main.go 文件中。
package main
import "fmt"
func main() {
a := 1
b := 2
c := a + b
fmt.Println(c)
}
用以下規(guī)則來格式化上面的代碼。
gofmt -w -r "a + b -> b + a" main.go
格式化的結(jié)果如下。
package main
import "fmt"
func main() {
a := 1
b := 2
c := b + a
fmt.Println(c)
}
注意:gofmt 使用 tab 來表示縮進(jìn),并且對行寬度無限制,如果手動對代碼進(jìn)行了換行,gofmt 不會強制把代碼格式化回一行。
go fmt 和 gofmt
gofmt 是一個獨立的 cli 程序,而Go語言中還有一個
go fmt命令,
go fmt命令是 gofmt 的簡單封裝。
go help fmt
usage: go fmt [-n] [-x] [packages]
Fmt runs the command 'gofmt -l -w' on the packages named
by 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命令本身只有兩個可選參數(shù)
-n和
-x:
-
-n僅打印出內(nèi)部要執(zhí)行的go fmt的命令; -
-x命令既打印出go fmt命令又執(zhí)行它,如果需要更細(xì)化的配置,需要直接執(zhí)行 gofmt 命令。
go fmt在調(diào)用 gofmt 時添加了
-l -w參數(shù),相當(dāng)于執(zhí)行了
gofmt -l -w。
分享題目:創(chuàng)新互聯(lián)GO教程:gofmt命令——格式化代碼文件
分享URL:http://www.dlmjj.cn/article/dhpicgg.html


咨詢
建站咨詢
