欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang一些常用的靜態(tài)檢查工具詳解

 更新時間:2020年11月23日 10:35:52   作者:xiaoliizi  
這篇文章主要介紹了golang一些常用的靜態(tài)檢查工具,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、背景

俗話說,工欲善其事,必先利其器。go 作為一個對基礎(chǔ)功能封裝非常好的語言,對編碼體驗,如何更高效地寫出高性能代碼,都是考慮非常好的。因此,如何能夠?qū)懗龈烙^、更安全的golang代碼,也是我們需要關(guān)注的目標(biāo)。go 本身也提供了非常多的工具供我們使用。

這里先將所有常用的指令放到這個表格中:

二、gofmt

主要修復(fù)代碼格式,比如代碼塊的tab。

2.1 參數(shù)說明

-l: 僅打印需要替換的文件名字,不替換文件內(nèi)容

如下:

在這里插入圖片描述

-r: 指定替換規(guī)則,格式:-s “pattern -> replacement”

-s:顯式指定需要替換的文件

-w:直接修改目標(biāo)文件,且命令行不打印任何數(shù)據(jù)

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

一般是對工程中變量名字的對齊,比如行開頭統(tǒng)一使用tab

注意:gofmt ≠ 代碼規(guī)范,比如它不會管單行是否超過了120個字符

2.2 go fmt

go fmt 是對 gofmt 的簡單封裝,比如一些通用的代碼規(guī)范規(guī)則,我們直接使用go fmt 就可以直接覆蓋了。效果如下:

在這里插入圖片描述

當(dāng)然,和 gofmt 一樣,go fmt 也不能解決代碼本身的邏輯問題。

三、goimports(比gofmt 更常用)

goimports 是gofmt 的升級版,相對gofmt,它不僅可以修復(fù)代碼格式,還可以規(guī)范import 的格式。
比較規(guī)范的import 格式:

import(
 // 標(biāo)準包
 "log"
 "json"
 ...
 // 內(nèi)部包
 "mygoproject/model/..."
 ...
 // 第三方包
 "github.com/..."
)

3.1 安裝

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

3.2 goland 配置

在這里插入圖片描述

3.3 手動格式化代碼/項目

修改某個文件:
goimports -w filename

修改整個目錄下的所有代碼:
goimports -w 目錄名

3.4 擴展:為什么格式規(guī)范化推薦用 goimports 而不是 go fmt

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

四、go vet (靜態(tài)代碼檢查)

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

4.1 執(zhí)行

掃描單個文件:
go vet filename.go

掃描整個項目:
go vet ./…

4.2 可以修復(fù)的問題 4.2.1 語法

在這里插入圖片描述

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

4.2.2 循環(huán) 和 goroutine/defer

還是前面的示例,把括號補充之后,依然會報錯:
loop variable currentFloat captured by func literal

這就是在循環(huán)中使用協(xié)程帶來的問題了。具體原因可以參考這個問答說明

循環(huán)中使用 go routine 一定要注意參數(shù)的傳遞方式。正確的使用方式:

在這里插入圖片描述

4.2.3 其他語法問題

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

五、go module

管理項目依賴
專題介紹

六、附錄-其他參考文章

1、goland 自帶的go 工具

到此這篇關(guān)于golang一些常用的靜態(tài)檢查工具的文章就介紹到這了,更多相關(guān)golang靜態(tài)檢查工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解go中panic源碼解讀

    詳解go中panic源碼解讀

    這篇文章主要介紹了go中panic源碼解讀,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Golang實現(xiàn)Java虛擬機之解析class文件詳解

    Golang實現(xiàn)Java虛擬機之解析class文件詳解

    這篇文章主要為大家詳細介紹了Golang實現(xiàn)Java虛擬機之解析class文件的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • golang 整合antlr語法校驗解析

    golang 整合antlr語法校驗解析

    Antlr是一個語法分析器,本身是用java實現(xiàn)的,然是Runtime的庫也支持Golang、Java、Python等,本文給大家講解使用golang整合antlr進行語法解析,感興趣的朋友一起看看吧
    2023-02-02
  • go語言編程之select信道處理示例詳解

    go語言編程之select信道處理示例詳解

    這篇文章主要為大家介紹了go語言編程之select信道處理示例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 深入剖析Go語言編程中switch語句的使用

    深入剖析Go語言編程中switch語句的使用

    這篇文章主要介紹了Go語言編程中switch語句的使用,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Go語言實現(xiàn)登錄驗證代碼案例

    Go語言實現(xiàn)登錄驗證代碼案例

    這篇文章主要介紹了Go語言實現(xiàn)登錄驗證代碼案例,代碼和圖文講解的很清晰,有感興趣的可以學(xué)習(xí)下
    2021-03-03
  • Golang使用gvm進行版本控制的安裝使用教程

    Golang使用gvm進行版本控制的安裝使用教程

    這篇文章主要為大家介紹了Golang使用gvm進行版本控制的安裝使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例

    golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例

    本文主要介紹了golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang函數(shù)重試機制實現(xiàn)代碼

    Golang函數(shù)重試機制實現(xiàn)代碼

    在編寫應(yīng)用程序時,有時候會遇到一些短暫的錯誤,例如網(wǎng)絡(luò)請求、服務(wù)鏈接終端失敗等,這些錯誤可能導(dǎo)致函數(shù)執(zhí)行失敗,這篇文章主要介紹了Golang函數(shù)重試機制實現(xiàn)代碼,需要的朋友可以參考下
    2024-04-04
  • Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    本篇文章將詳細介紹如何正確地實現(xiàn)Redis分布式鎖,下面通過一個項目基于 Redis 的分布式鎖能夠提供哪些分布鎖特性,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2021-06-06

最新評論