golang vet工具的使用
一般來說每一門語言都有一些用來進行語法檢查的工具,vet就是golang中提供的語法檢查工具,可以讓我檢查出package或者源碼文件中一些隱含的錯誤,規範我們的項目代碼,下面我簡單講解下該工具的使用.
vet工具的路徑
vet安裝在每一個平臺操作系統的
/usr/local/go/pkg/tool/darwin_amd64/vet
每個平臺的安裝路都不相同,比如linux 32位下可能是:
/usr/local/go/pkg/tool/darwin_386/vet
vet的使用
go vet 和 go tool vet基本上功能類似,go tool vet可以遞歸的對package進行語法檢測,可以自行測試區別。
對一個.go源文件進行檢查
下面的vet.go代碼有一行語法錯誤,我們用go vet vet.go
檢查
package vet
import (
"fmt"
)
func vetTest() xxxxx{
fmt.Println("vet test")
}
運行結果如下:
一個包下所有源文件進行檢測
go tool vet source/directory/*.go
對一個package進行語法檢查
我們同樣可以利用vet 對一個package進行檢查,當然傳入的包名必須是 相對路徑 或者完整package。
例如我當前項目目錄在$GOPATH/src/Test ,那麼傳入可以輸入 go vet Test/vet 對vet包進行語法檢查
如果我當前工作目錄就是Test 那麼我也可以直接輸入 go vet ./vet 利用相對路徑進行語法檢查
不可以同時對package和源文件進行檢查,但可以同時對多個包或者多個源文件進行檢查
檢測多個package
go vet package1 package2
檢測多個源文件
go vet file1.go file2.go
錯誤的用法
go vet file.go package1
附加tags
我們還可以給vet 傳遞一些 tag 來指定檢測行爲,默認是all,全部檢查,當傳入以下tag的時候all將被設置爲false
使用方法
go vet -atomic=false test.go
更多tag含義如下表,我從網上尋找,大家也可以去golang 官方去找 vet command的文檔,裏面更精確地描述。
tag | 描述 |
---|---|
-all | 進行全部檢查。如果有其他檢查標記被設置,則命令程序會將此值變爲false。默認值爲true。 |
-asmdecl | 對彙編語言的源碼文件進行檢查。默認值爲false。 |
-assign | 檢查賦值語句。默認值爲false。 |
-atomic | 檢查代碼中對代碼包sync/atomic的使用是否正確。默認值爲false。 |
-composites | 是否使用複合結構檢查的白名單。僅供測試使用。默認值爲true。 |
-compositeWhiteList | 對彙編語言的源碼文件進行檢查。默認值爲false。 |
-assign | 檢查賦值語句。默認值爲false。 |
-methods | 檢查那些擁有標準命名的方法的簽名。默認值爲false。 |
-printf | 檢查代碼中對打印函數的使用是否正確。默認值爲false。 |
-printfuncs | 需要檢查的代碼中使用的打印函數的名稱的列表,多個函數名稱之間用英文半角逗號分隔。默認值爲空字符串。 |
-rangeloops | 檢查代碼中對在range 語句塊中迭代賦值的變量的使用是否正確。默認值爲false。 |
-structtags | 檢查結構體類型的字段的標籤的格式是否標準。默認值爲false。 |
-unreachable | 查找並報告不可到達的代碼。默認值爲false。 |