golang使用vet進行語法檢查

golang vet工具的使用

一般來說每一門語言都有一些用來進行語法檢查的工具,vet就是golang中提供的語法檢查工具,可以讓我檢查出package或者源碼文件中一些隱含的錯誤,規範我們的項目代碼,下面我簡單講解下該工具的使用.


vet工具的路徑

vet安裝在每一個平臺操作系統的 GOROOT/pkg/tools/ GOOS_$GOARCH/ 目錄下, 例如我的Mac下就安裝下面這個路徑:

/usr/local/go/pkg/tool/darwin_amd64/vet   

每個平臺的安裝路都不相同,比如linux 32位下可能是:

/usr/local/go/pkg/tool/darwin_386/vet  

test

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")
    }

運行結果如下:

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。


本文參考自https://golang.org/cmd/vet/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章