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

Go Uber靜態(tài)分析工具NilAway使用初體驗(yàn)

 更新時(shí)間:2024年01月11日 11:24:31   作者:程序員大兵  
這篇文章主要介紹了Go Uber靜態(tài)分析工具NilAway使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Uber 開(kāi)源的靜態(tài)分析工具 NilAway

今天給大家介紹以下 Uber 開(kāi)源的靜態(tài)分析工具 NilAway,下面開(kāi)魯。

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

NilAway是一個(gè)靜態(tài)分析工具,旨在通過(guò)在編譯時(shí)而不是運(yùn)行時(shí)捕獲nil panic來(lái)幫助開(kāi)發(fā)人員避免在生產(chǎn)中出現(xiàn)這種情況。NilAway類(lèi)似于標(biāo)準(zhǔn)的nilness分析器,但它采用更復(fù)雜和強(qiáng)大的靜態(tài)分析技術(shù)來(lái)跟蹤包內(nèi)和跨包的nil流,并報(bào)告錯(cuò)誤,為用戶(hù)提供更輕松的調(diào)試nilness流程。

NilAway關(guān)鍵特性

NilAway具有三個(gè)關(guān)鍵特性,使其脫穎而出:

完全自動(dòng)化:NilAway配備有推理引擎,因此除了標(biāo)準(zhǔn)的Go代碼之外,它不需要從開(kāi)發(fā)人員那里獲取任何其他信息(例如注釋?zhuān)?/p>

速度快:我們?cè)O(shè)計(jì)NilAway為快速且可擴(kuò)展,適用于大型代碼庫(kù)。在我們的測(cè)量中,啟用NilAway時(shí)構(gòu)建時(shí)間開(kāi)銷(xiāo)不到5%。我們還在不斷應(yīng)用優(yōu)化來(lái)進(jìn)一步減少其占用空間。

實(shí)用性:它不能阻止代碼中所有可能的nil panic,但它可以捕獲我們?cè)谏a(chǎn)中觀察到的大多數(shù)潛在nil panic,使NilAway在實(shí)用性和構(gòu)建時(shí)間開(kāi)銷(xiāo)之間保持良好平衡。

安裝

NilAway是使用標(biāo)準(zhǔn)的go/analysis框架實(shí)現(xiàn)的,因此易于與現(xiàn)有的分析驅(qū)動(dòng)程序集成(例如golangci-lint、nogo或作為獨(dú)立檢查器運(yùn)行)。下面是將NilAway作為獨(dú)立檢查器運(yùn)行的說(shuō)明。更多集成支持將很快添加。

獨(dú)立檢查器

通過(guò)以下命令從源代碼安裝二進(jìn)制文件:

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

然后,通過(guò)以下命令運(yùn)行l(wèi)inter:

nilaway ./...

案例一 NilAway如何幫助防止nil panic

讓我們看一些示例,了解NilAway如何幫助防止nil panic。

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

在這個(gè)示例中,局部變量p僅在someCondition為true時(shí)初始化。在字段訪問(wèn)p.f時(shí),如果someCondition為false,則可能發(fā)生panic。NilAway能夠捕獲這個(gè)潛在的nil導(dǎo)致的panic并報(bào)告以下錯(cuò)誤:

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`

如果我們使用nil檢查(if p != nil)保護(hù)此解引用,錯(cuò)誤將消失。

案例二 NilAway還能夠捕獲跨函數(shù)的nil流

例如,考慮以下代碼片段:

// Example 2:
func foo() *int {
      return nil
}
func bar() {
     print(*foo()) // nilness reports NO error here, but NilAway does.
}

在這個(gè)示例中,函數(shù)foo返回一個(gè)nil指針,在bar中直接解引用,無(wú)論何時(shí)調(diào)用bar都會(huì)導(dǎo)致panic。NilAway能夠捕獲這個(gè)潛在的nil導(dǎo)致的panic并報(bào)告以下錯(cuò)誤:

go.uber.org/example.go:23:13: error: Potential nil panic detected. Observed nil flow from source to dereference point:
    -> go.uber.org/example.go:20:14: literal `nil` returned from `foo()` in position 0
    -> go.uber.org/example.go:23:13: result 0 of `foo()` dereferenced

請(qǐng)注意,在上面的示例中,foo不一定要與bar位于同一個(gè)包中。NilAway還能夠跟蹤跨包的nil流。此外,NilAway處理Go特定的語(yǔ)言構(gòu)造,如接收器、接口、類(lèi)型斷言、類(lèi)型開(kāi)關(guān)等。

總結(jié)

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

以上就是Go Uber靜態(tài)分析工具NilAway使用初體驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于Go Uber靜態(tài)分析NilAway的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享

    GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享

    這篇文章主要介紹了GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享,本文直接給出實(shí)現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
    2014-10-10
  • Golang Mutex實(shí)現(xiàn)互斥的具體方法

    Golang Mutex實(shí)現(xiàn)互斥的具體方法

    Mutex是Golang常見(jiàn)的并發(fā)原語(yǔ),在開(kāi)發(fā)過(guò)程中經(jīng)常使用到,本文主要介紹了Golang Mutex實(shí)現(xiàn)互斥的具體方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-04-04
  • Go語(yǔ)言中io.Reader和io.Writer的詳解與實(shí)現(xiàn)

    Go語(yǔ)言中io.Reader和io.Writer的詳解與實(shí)現(xiàn)

    在Go語(yǔ)言的實(shí)際編程中,幾乎所有的數(shù)據(jù)結(jié)構(gòu)都圍繞接口展開(kāi),接口是Go語(yǔ)言中所有數(shù)據(jù)結(jié)構(gòu)的核心。在使用Go語(yǔ)言的過(guò)程中,無(wú)論你是實(shí)現(xiàn)web應(yīng)用程序,還是控制臺(tái)輸入輸出,又或者是網(wǎng)絡(luò)操作,不可避免的會(huì)遇到IO操作,使用到io.Reader和io.Writer接口。下面來(lái)詳細(xì)看看。
    2016-09-09
  • GO workPool的線程池實(shí)現(xiàn)

    GO workPool的線程池實(shí)現(xiàn)

    本文主要介紹了GO workPool的線程池實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • go語(yǔ)言中json數(shù)據(jù)的讀取和寫(xiě)出操作

    go語(yǔ)言中json數(shù)據(jù)的讀取和寫(xiě)出操作

    這篇文章主要介紹了go語(yǔ)言中json數(shù)據(jù)的讀取和寫(xiě)出操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • go浮點(diǎn)數(shù)轉(zhuǎn)字符串保留小數(shù)點(diǎn)后N位的完美解決方法

    go浮點(diǎn)數(shù)轉(zhuǎn)字符串保留小數(shù)點(diǎn)后N位的完美解決方法

    這篇文章主要介紹了go浮點(diǎn)數(shù)轉(zhuǎn)字符串保留小數(shù)點(diǎn)后N位解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 使用go實(shí)現(xiàn)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

    使用go實(shí)現(xiàn)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了使用go實(shí)現(xiàn)常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Go1.18新特性之泛型使用三步曲(小結(jié))

    Go1.18新特性之泛型使用三步曲(小結(jié))

    本文主要介紹了Go1.18新特性之泛型,是Go1.18的新特性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • golang?Gin上傳文件返回前端及中間件實(shí)現(xiàn)示例

    golang?Gin上傳文件返回前端及中間件實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了golang?Gin上傳文件返回前端及中間件實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang中interface是引用類(lèi)型的原因解析

    Golang中interface是引用類(lèi)型的原因解析

    在Go語(yǔ)言中,將interface設(shè)計(jì)為引用類(lèi)型是為了實(shí)現(xiàn)更靈活、更動(dòng)態(tài)的類(lèi)型系統(tǒng),這篇文章主要介紹了深度解析Golang中為什么interface是引用類(lèi)型,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

肇源县| 古蔺县| 临沭县| 阜新| 专栏| 资中县| 剑河县| 虎林市| 万年县| 上虞市| 曲水县| 萨迦县| 临朐县| 大城县| 元朗区| 大理市| 怀化市| 湖南省| 夏邑县| 宣武区| 泽库县| 九台市| 大姚县| 黄石市| 梁山县| 成安县| 敖汉旗| 米泉市| 西吉县| 盘山县| 策勒县| 万载县| 钦州市| 十堰市| 汾阳市| 阿克陶县| 利辛县| 梁平县| 比如县| 蚌埠市| 邳州市|