最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、背景

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

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

二、gofmt

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

2.1 參數(shù)說(shuō)明

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

如下:

在這里插入圖片描述

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

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

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

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

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

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

2.2 go fmt

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

在這里插入圖片描述

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

三、goimports(比gofmt 更常用)

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

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

3.1 安裝

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

3.2 goland 配置

在這里插入圖片描述

3.3 手動(dòng)格式化代碼/項(xiàng)目

修改某個(gè)文件:
goimports -w filename

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

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

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

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

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

4.1 執(zhí)行

掃描單個(gè)文件:
go vet filename.go

掃描整個(gè)項(xiàng)目:
go vet ./…

4.2 可以修復(fù)的問(wèn)題 4.2.1 語(yǔ)法

在這里插入圖片描述

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

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

還是前面的示例,把括號(hào)補(bǔ)充之后,依然會(huì)報(bào)錯(cuò):
loop variable currentFloat captured by func literal

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

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

在這里插入圖片描述

4.2.3 其他語(yǔ)法問(wèn)題

比如永遠(yuǎn)是true/false的表達(dá)式,或者是不可到達(dá)的代碼等。

五、go module

管理項(xiàng)目依賴(lài)
專(zhuān)題介紹

六、附錄-其他參考文章

1、goland 自帶的go 工具

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

相關(guān)文章

  • go語(yǔ)言實(shí)現(xiàn)LRU緩存的示例代碼

    go語(yǔ)言實(shí)現(xiàn)LRU緩存的示例代碼

    LRU是一種常見(jiàn)的緩存淘汰策略,用于管理緩存中的數(shù)據(jù),本文主要介紹了go語(yǔ)言實(shí)現(xiàn)LRU緩存的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 淺談Go語(yǔ)言中的接口類(lèi)型

    淺談Go語(yǔ)言中的接口類(lèi)型

    Go語(yǔ)言中接口是一種抽象的類(lèi)型,本文主要介紹了淺談Go語(yǔ)言中的接口類(lèi)型,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 入門(mén)學(xué)習(xí)Go的基本語(yǔ)法

    入門(mén)學(xué)習(xí)Go的基本語(yǔ)法

    這篇文章主要介紹了Go語(yǔ)法的基本概念,本文講解了Golang的基本知識(shí)、基礎(chǔ)語(yǔ)法、相關(guān)術(shù)語(yǔ)等,需要的朋友可以參考下,希望能幫助到你
    2021-07-07
  • 在Go語(yǔ)言項(xiàng)目中使用Zap日志庫(kù)的操作過(guò)程

    在Go語(yǔ)言項(xiàng)目中使用Zap日志庫(kù)的操作過(guò)程

    本文將先介紹Go語(yǔ)言原生的日志庫(kù)的使用,然后詳細(xì)介紹非常流行的Uber開(kāi)源的zap日志庫(kù),同時(shí)會(huì)介紹如何搭配·Lumberjack·實(shí)現(xiàn)日志的切割和歸檔,對(duì)Go使用Zap日志庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-03-03
  • go語(yǔ)言操作之nacos配置中心

    go語(yǔ)言操作之nacos配置中心

    這篇文章主要介紹了go語(yǔ)言操作之nacos配置中心,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Go指針的具體使用

    Go指針的具體使用

    本文主要介紹了Go指針的具體使用,包括使用指針、空指針、指針數(shù)組、指向指針的指針等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • golang?JSON序列化和反序列化示例詳解

    golang?JSON序列化和反序列化示例詳解

    通過(guò)使用Go語(yǔ)言的encoding/json包,你可以輕松地處理JSON數(shù)據(jù),無(wú)論是在客戶(hù)端應(yīng)用、服務(wù)器端應(yīng)用還是其他類(lèi)型的Go程序中,這篇文章主要介紹了golang?JSON序列化和反序列化,需要的朋友可以參考下
    2024-04-04
  • golang 中strings包的Replace的使用說(shuō)明

    golang 中strings包的Replace的使用說(shuō)明

    這篇文章主要介紹了golang 中strings包的Replace的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 基于Go實(shí)現(xiàn)TCP長(zhǎng)連接上的請(qǐng)求數(shù)控制

    基于Go實(shí)現(xiàn)TCP長(zhǎng)連接上的請(qǐng)求數(shù)控制

    在服務(wù)端開(kāi)啟長(zhǎng)連接的情況下,四層負(fù)載均衡轉(zhuǎn)發(fā)請(qǐng)求時(shí),會(huì)出現(xiàn)服務(wù)端收到的請(qǐng)求qps不均勻的情況或是服務(wù)器無(wú)法接受到請(qǐng)求,因此需要服務(wù)端定期主動(dòng)斷開(kāi)一些長(zhǎng)連接,所以本文給大家介紹了基于Go實(shí)現(xiàn)TCP長(zhǎng)連接上的請(qǐng)求數(shù)控制,需要的朋友可以參考下
    2024-05-05
  • golang beyla采集trace程序原理源碼解析

    golang beyla采集trace程序原理源碼解析

    beyla支持通過(guò)ebpf,無(wú)侵入的、自動(dòng)采集應(yīng)用程序的trace信息,本文以golang的nethttp為例,講述beyla對(duì)trace的采集的實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-02-02

最新評(píng)論

招远市| 南丰县| 镇远县| 长沙县| 四川省| 安龙县| 绿春县| 白玉县| 镇平县| 湾仔区| 凤翔县| 洪江市| 荣昌县| 乐山市| 丰城市| 平邑县| 洮南市| 祁门县| 准格尔旗| 舒兰市| 城步| 沿河| 普洱| 咸丰县| 文安县| 昌吉市| 铅山县| 滨海县| 富源县| 鄂尔多斯市| 长汀县| 兴义市| 鹤壁市| 大厂| 水富县| 阿拉善左旗| 揭东县| 项城市| 安塞县| 朝阳市| 荆门市|