golang一些常用的靜態檢查工具詳解

2022-09-24 10:57:09 字數 1769 閱讀 3651

俗話說,工欲善其事,必先利其器。go 作為乙個對基礎功能封裝非常好的語言,對編碼體驗,如何更高效地寫出高效能**,都是考慮非常好的。因此,如何能夠寫出更美觀、更安全的golang**,也是我們需要關注的目標。go 本身也提供了非常多的工具供我們使用。

這裡先將所有常用的指令放到這個**中:

主要修復**格式,比如**塊的tab。

2.1 引數說明

-l: 僅列印需要替換的檔案名字,不替換檔案內容

如下:-r: 指定替換規則,格式:-s 「pattern -> replacement」

-s:顯式指定需要替換的檔案

-w:直接修改目標檔案,且命令列不列印任何資料

idea 自帶,也可以使用下面的語句強行執行

一般是對工程中變數名字的對齊,比如行開頭統一使用程式設計客棧tab

注意:gofmt ≠ **規範,比如它不會管單行是否超過了120個字元

2.2 go fmt

go fmt 是對 gofmt 的簡單封裝,比如一些通用的**規範規則,我們直接使用go fmt 就可以直接覆蓋了。效果如下:

當然,和 gofmt 一樣,go fmt 也不能解決**本身的邏輯問題。

goimports 是gofmt 的公升級版,相對gofmt,它不僅可以修復**格式,還可以規範import 的格式。

比較規範的import 格式:

程式設計客棧import(

// 標準包

"log"

uzgzylb"json"

...// 內部包

"mygoproject/model/..."

...// 第三方包

)3.1 安裝

go get golang.org/x/tools/cmd/goimports

3.2 goland 配置

3.3 手動格式化**/專案

修改某個檔案:

goimports -w filename

修改整個目錄下的所有**:

goimports -w 目錄名

3.4 擴充套件:為什麼格式規範化推薦用 goimports 而不是 go fmt

總結:gowww.cppcns.comimports 也封裝了gofmt 的功能,而且goimports 會對無用import 刪除,對go 自己的包和第三方包 進行整理,功能更強大。

前面看到的 gofmt 和 goimports 都不涉及到**邏輯的檢查。那麼接下來就是 go vet 大展手腳的地方了

4.1 執行

掃瞄單個檔案:

go vet filename.go

掃瞄整個專案:

go vet ./…

4.2 可以修復的問題 4.2.1 語法

比如這裡我們使用 go routine 的語法有問題,執行 go vet 會提示:function must be invoked in go statement

4.2.2 迴圈 和 goro程式設計客棧utine/defer

還是前面的示例,把括號補充之後,依然會報錯:

loop variable currentfloat captured by func literal

這就是在迴圈中使用協程帶來的問題了。具體原因可以參考這個問答說明。

迴圈中使用 go routine 一定要注意引數的傳遞方式。正確的使用方式:

4.2.3 其他語法問題

比如永遠是true/false的表示式,或者是不可到達的**等。

管理專案依賴

專題介紹

1、goland 自帶的go 工具

golang 一些常用的靜態檢查工具

三 goimports 比gofmt 更常用 四 go vet 靜態 檢查 五 go module 俗話說,工欲善其事,必先利其器。go 作為乙個對基礎功能封裝非常好的語言,對編碼體驗,如何更高效地寫出高效能 都是考慮非常好的。因此,如何能夠寫出更美觀 更安全的golang 也是我們需要關注的目標。...

記錄一些常用golang包的用法

定義flag有兩種方式 flag.int flagname 1000,help message for flagname 返回的是對應型別的指標 第乙個引數 設定flag的名稱 第二個引數 設定flag的預設值 第三個引數 設定flag的提示資訊 flag.intvar var,flagname 1...

golang的一些使用技巧

1.列舉的實現 const freetime 5 bettime 9 opentime 7 比如 定義位元組大小的列舉 const b 1 10 iota 1 kb 1024 mb 1024 1024 gb 1024 1024 1024 2.繼承 type father struct var son...