日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Uber Go 出了個靜態(tài)分析工具 NilAway,還挺實用!

來源: 責編: 時間:2024-01-03 09:11:49 209觀看
導讀大家好,我是煎魚。風水輪流轉,Go 程序寫多了。總是會這有點問題,那有點問題。問題積累久了就容易出點事件,甚至是事故。這種時候大家往往會想著引入一些靜態(tài)分析工具來解決這個問題。元旦假期時剛好看到這個新輪子,分享給

大家好,我是煎魚。Imw28資訊網(wǎng)——每日最新資訊28at.com

風水輪流轉,Go 程序寫多了。總是會這有點問題,那有點問題。問題積累久了就容易出點事件,甚至是事故。Imw28資訊網(wǎng)——每日最新資訊28at.com

這種時候大家往往會想著引入一些靜態(tài)分析工具來解決這個問題。元旦假期時剛好看到這個新輪子,分享給大家!Imw28資訊網(wǎng)——每日最新資訊28at.com

NilAway 分析工具

最近 Uber 開發(fā)和開源了一個挺不錯的靜態(tài)分析工具 NilAway:Imw28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Imw28資訊網(wǎng)——每日最新資訊28at.com

使用場景是:在 Go 程序編譯時就能捕獲 nil,達到幫助開發(fā)人員規(guī)避在生產(chǎn)中出現(xiàn) nil panic 的問題。Imw28資訊網(wǎng)——每日最新資訊28at.com

官方認為其具備以下三個重要的特點,讓其脫穎而出:Imw28資訊網(wǎng)——每日最新資訊28at.com

  1. 完全自動化:該分析工具只需要用戶提供標準的 Go 代碼就可以使用了。不需要其他任何額外的信息。
  2. 速度快:在設計上,NilAway 保持速度快且可擴展,目標是大型代碼庫也可以使用。在官方的性能測量中,啟用 NilAway 時構建時間開銷不到 5%。
  3. 很實用:它不能防止代碼中所有可能的 nil panic,但能捕獲我們在生產(chǎn)中觀察到的大部分潛在 nil panic,從而使 NilAway 在實用性和構建時間開銷之間保持良好的平衡。

安裝

我們只需要在命令行執(zhí)行如下命令安裝:Imw28資訊網(wǎng)——每日最新資訊28at.com

$ go install go.uber.org/nilaway/cmd/nilaway@latest

nilaway 能夠遍歷掃描目錄下的所有文件:Imw28資訊網(wǎng)——每日最新資訊28at.com

$ nilaway ./...

也可以掃描單獨的文件:Imw28資訊網(wǎng)——每日最新資訊28at.com

$ nilaway demo.go

注:本文安裝 @latest 的原因,是因為寫此文時 nilaway 還在積極開發(fā)階段,暫時沒有發(fā)布正式的版本。如果后續(xù)有正式版本,也可以指定相應版本號。Imw28資訊網(wǎng)——每日最新資訊28at.com

代碼示例

案例一

看看如下的代碼,是在什么場景下有問題:Imw28資訊網(wǎng)——每日最新資訊28at.com

var p *Pif someCondition {      p = &P{}}print(p.f) // nilness reports NO error here, but NilAway does.

在上述代碼中,當 someCondition 變量值為 true 時,才會初始化結構體 P。如果 someCondition 變量為 false 時,就會出現(xiàn)空指針調用的 panic 問題。Imw28資訊網(wǎng)——每日最新資訊28at.com

NilAway 工具可以捕獲這種錯誤并報告,會報告如下錯誤:Imw28資訊網(wǎng)——每日最新資訊28at.com

go.uber.org/example.go:12:9: error: Potential nil panic detected. Observed nil flow from source to dereference point:    -> go.uber.org/example.go:12:9: unassigned variable `p` accessed field `f`

如果我們增加 if p != nil 來做防御,報告的錯誤就會消失。Imw28資訊網(wǎng)——每日最新資訊28at.com

案例二

看看如下的代碼,是為什么有問題:Imw28資訊網(wǎng)——每日最新資訊28at.com

func foo() *int { return nil}func bar() { print(*foo())}func main() { // 煎魚正在干點什么... bar() // nilness reports NO error here, but NilAway does.}

函數(shù) foo 返回了一個 nil 指針,該指針在函數(shù) bar 中被直接取消引用,導致每當調用函數(shù) bar 時都會出現(xiàn) panic 問題。Imw28資訊網(wǎng)——每日最新資訊28at.com

NilAway 工具也能捕獲這類跨函數(shù)的的問題,會報告如下錯誤:Imw28資訊網(wǎng)——每日最新資訊28at.com

?  ~ nilaway demo.go /Users/eddycjy/demo.go:7:9: error: Potential nil panic detected. Observed nil flow from source to dereference point:  -> eddycjy/demo.go:4:9: literal `nil` returned from `foo()` in position 0 -> eddycjy/demo.go:7:9: result 0 of `foo()` dereferenced

上面的例子雖然是同 package 內跨函數(shù)的問題識別,但實際上該工具也嫩能夠分析跨 package 的調用。Imw28資訊網(wǎng)——每日最新資訊28at.com

總結

今天針對 Go 里最常見的 nil 指針問題進行了靜態(tài)分析工具 NilAway 的分享。雖然目前該工具還沒有正式的生產(chǎn)可用。Imw28資訊網(wǎng)——每日最新資訊28at.com

可以明確的是這是大家在 Go 應用上常碰到的場景,可以多加關注后續(xù)的更新。另外 NilAway 是基于 go/analysis 標準開發(fā)的,后續(xù)可以接入 golangci-lint 等相關工具。大家可以繼續(xù)保持關注!Imw28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-56550-0.htmlUber Go 出了個靜態(tài)分析工具 NilAway,還挺實用!

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: JS小知識,分享十個有用 JavaScript 小技巧

下一篇: 圖形編輯器開發(fā):縮放和旋轉控制點

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 永寿县| 西安市| 辉南县| 郧西县| 汨罗市| 荔浦县| 开远市| 屏东县| 洛南县| 桂平市| 菏泽市| 灵武市| 得荣县| 鹤岗市| 达孜县| 卢龙县| 岳西县| 陇南市| 襄垣县| 武城县| 瑞丽市| 台南县| 铜山县| 都昌县| 莲花县| 达拉特旗| 芜湖县| 兴化市| 辽宁省| 舞阳县| 开鲁县| 湾仔区| 英超| 丽江市| 永丰县| 曲松县| 漠河县| 康平县| 瑞金市| 中牟县| 万宁市|