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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

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

來(lái)源: 責(zé)編: 時(shí)間:2024-01-03 09:11:49 189觀看
導(dǎo)讀大家好,我是煎魚。風(fēng)水輪流轉(zhuǎn),Go 程序?qū)懚嗔恕?偸菚?huì)這有點(diǎn)問題,那有點(diǎn)問題。問題積累久了就容易出點(diǎn)事件,甚至是事故。這種時(shí)候大家往往會(huì)想著引入一些靜態(tài)分析工具來(lái)解決這個(gè)問題。元旦假期時(shí)剛好看到這個(gè)新輪子,分享給

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

風(fēng)水輪流轉(zhuǎn),Go 程序?qū)懚嗔恕?偸菚?huì)這有點(diǎn)問題,那有點(diǎn)問題。問題積累久了就容易出點(diǎn)事件,甚至是事故。KH128資訊網(wǎng)——每日最新資訊28at.com

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

NilAway 分析工具

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

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

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

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

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

安裝

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

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

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

$ nilaway ./...

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

$ nilaway demo.go

注:本文安裝 @latest 的原因,是因?yàn)閷懘宋臅r(shí) nilaway 還在積極開發(fā)階段,暫時(shí)沒有發(fā)布正式的版本。如果后續(xù)有正式版本,也可以指定相應(yīng)版本號(hào)。KH128資訊網(wǎng)——每日最新資訊28at.com

代碼示例

案例一

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

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

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

NilAway 工具可以捕獲這種錯(cuò)誤并報(bào)告,會(huì)報(bào)告如下錯(cuò)誤:KH128資訊網(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`

如果我們?cè)黾?nbsp;if p != nil 來(lái)做防御,報(bào)告的錯(cuò)誤就會(huì)消失。KH128資訊網(wǎng)——每日最新資訊28at.com

案例二

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

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

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

NilAway 工具也能捕獲這類跨函數(shù)的的問題,會(huì)報(bào)告如下錯(cuò)誤:KH128資訊網(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 內(nèi)跨函數(shù)的問題識(shí)別,但實(shí)際上該工具也嫩能夠分析跨 package 的調(diào)用。KH128資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

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

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

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

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

上一篇: JS小知識(shí),分享十個(gè)有用 JavaScript 小技巧

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來(lái)預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請(qǐng)期待。”同時(shí)
  • 盧偉冰長(zhǎng)文解析K60至尊版 對(duì)Redmi有著里程碑式的意義

    在今天的Redmi后性能時(shí)代戰(zhàn)略發(fā)布會(huì)結(jié)束之后,Redmi總經(jīng)理盧偉冰又帶來(lái)了一篇長(zhǎng)文,詳解了為什么 Redmi 要開啟后性能時(shí)代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 消息稱迪士尼要拍真人版《魔發(fā)奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實(shí)有點(diǎn)忙,忙著將不少動(dòng)畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發(fā)奇緣》也在路上了。據(jù)外媒消息稱,迪士尼將打造真人版
  • 十個(gè)可以手動(dòng)編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會(huì)很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對(duì)它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實(shí)用文檔、數(shù)據(jù)圖表及個(gè)性化定制服務(wù)。優(yōu)點(diǎn):OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營(yíng),這意味著騰訊音樂長(zhǎng)音頻業(yè)務(wù)走向消亡。騰訊在長(zhǎng)音頻領(lǐng)域還在摸索。為
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁(yè)“充值中心”入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 8月見!小米MIX Fold 3獲得3C認(rèn)證:支持67W快充

    這段時(shí)間以來(lái),包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
Top 主站蜘蛛池模板: 宜兰县| 浦东新区| 昭平县| 葵青区| 永川市| 盱眙县| 黄骅市| 九江市| 南涧| 若尔盖县| 突泉县| 黔东| 渑池县| 呼和浩特市| 老河口市| 绥化市| 琼结县| 旅游| 铜鼓县| 什邡市| 静海县| 阿克陶县| 光山县| 浏阳市| 桂平市| 武定县| 天祝| 双桥区| 兖州市| 南丹县| 新干县| 阳山县| 龙口市| 安达市| 湾仔区| 林口县| 苗栗市| 宁德市| 左云县| 普安县| 兴隆县|