成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 開發(fā)工具
今天針對 Go 里最常見的 nil 指針問題進行了靜態(tài)分析工具 NilAway 的分享。雖然目前該工具還沒有正式的生產可用。

大家好,我是煎魚。

風水輪流轉,Go 程序寫多了。總是會這有點問題,那有點問題。問題積累久了就容易出點事件,甚至是事故。

這種時候大家往往會想著引入一些靜態(tài)分析工具來解決這個問題。元旦假期時剛好看到這個新輪子,分享給大家!

NilAway 分析工具

最近 Uber 開發(fā)和開源了一個挺不錯的靜態(tài)分析工具 NilAway:

圖片圖片

使用場景是:在 Go 程序編譯時就能捕獲 nil,達到幫助開發(fā)人員規(guī)避在生產中出現(xiàn) nil panic 的問題。

官方認為其具備以下三個重要的特點,讓其脫穎而出:

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

安裝

我們只需要在命令行執(zhí)行如下命令安裝:

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

nilaway 能夠遍歷掃描目錄下的所有文件:

$ nilaway ./...

也可以掃描單獨的文件:

$ nilaway demo.go

注:本文安裝 @latest 的原因,是因為寫此文時 nilaway 還在積極開發(fā)階段,暫時沒有發(fā)布正式的版本。如果后續(xù)有正式版本,也可以指定相應版本號。

代碼示例

案例一

看看如下的代碼,是在什么場景下有問題:

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

在上述代碼中,當 someCondition 變量值為 true 時,才會初始化結構體 P。如果 someCondition 變量為 false 時,就會出現(xiàn)空指針調用的 panic 問題。

NilAway 工具可以捕獲這種錯誤并報告,會報告如下錯誤:

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 來做防御,報告的錯誤就會消失。

案例二

看看如下的代碼,是為什么有問題:

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 問題。

NilAway 工具也能捕獲這類跨函數(shù)的的問題,會報告如下錯誤:

?  ~ 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 的調用。

總結

今天針對 Go 里最常見的 nil 指針問題進行了靜態(tài)分析工具 NilAway 的分享。雖然目前該工具還沒有正式的生產可用。

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

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2019-05-27 09:14:28

2012-05-22 00:28:21

JavaJava開源開源工具

2021-06-08 13:56:34

工具靜態(tài)代碼

2021-12-03 05:54:20

React組件前端

2024-01-08 13:47:00

代碼分析工具

2018-01-25 14:34:18

大數(shù)據(jù)可視化工具

2018-08-21 06:53:49

Linux下載工具Windows

2021-07-29 06:37:55

KubernetesKubeLinter工具

2016-05-17 13:54:05

2020-12-07 14:46:07

程序員代碼分析工具

2021-03-29 23:05:36

程序員工具靜態(tài)分析

2016-04-26 14:04:29

大數(shù)據(jù)可視化

2020-04-26 08:22:53

前端網站工具代碼

2022-05-30 08:14:48

編譯器Go語言

2013-03-20 09:40:46

HTMLCSS工具

2022-12-13 15:42:56

Clang-Tidy靜態(tài)分析工具

2022-12-09 15:38:54

Cppcheck靜態(tài)分析工具

2024-01-02 07:59:25

Go測試建議

2021-11-04 05:43:38

GoKartGo代碼靜態(tài)安全分析

2022-04-07 14:09:50

Go工程師代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品小视频在线观看 | 国产99久久 | 日韩电影一区二区三区 | 毛片久久久 | 国产激情精品一区二区三区 | 99久久精品免费看国产四区 | 亚洲欧美国产视频 | 黄色一级免费观看 | 国产欧美精品一区二区 | 一区二区三区在线 | 天堂在线网 | 啪啪精品| 精品一区二区在线观看 | 亚洲网站在线 | 伊人超碰| 久久久久亚洲精品 | 久久99深爱久久99精品 | 五月激情六月婷婷 | 久久久久久av | 二区久久| 国产精品色哟哟网站 | 91精品国产欧美一区二区 | 欧美激情一区 | 午夜精品久久久久久久久久久久久 | 欧美精品一区二区三区蜜桃视频 | 综合九九| 天天操夜夜艹 | 91九色视频 | 久久精品网 | 午夜免费视频 | 欧美日韩国产一区二区三区 | 在线国产一区二区三区 | 在线婷婷 | 国产亚洲成av人片在线观看桃 | 国产午夜久久久 | 亚洲国产精品一区二区久久 | 日本三级电影在线观看视频 | 亚洲精品中文字幕在线 | av一级 | 视频一区二区在线观看 | 国产色婷婷久久99精品91 |