当前位置:首页 > 科技  > 软件

Uber Go 出了个静态分析工具 NilAway,还挺实用!

来源: 责编: 时间:2024-01-03 09:11:49 317观看
导读大家好,我是煎鱼。风水轮流转,Go 程序写多了。总是会这有点问题,那有点问题。问题积累久了就容易出点事件,甚至是事故。这种时候大家往往会想着引入一些静态分析工具来解决这个问题。元旦假期时刚好看到这个新轮子,分享给

大家好,我是煎鱼。CI228资讯网——每日最新资讯28at.com

风水轮流转,Go 程序写多了。总是会这有点问题,那有点问题。问题积累久了就容易出点事件,甚至是事故。CI228资讯网——每日最新资讯28at.com

这种时候大家往往会想着引入一些静态分析工具来解决这个问题。元旦假期时刚好看到这个新轮子,分享给大家!CI228资讯网——每日最新资讯28at.com

NilAway 分析工具

最近 Uber 开发和开源了一个挺不错的静态分析工具 NilAway:CI228资讯网——每日最新资讯28at.com

图片图片CI228资讯网——每日最新资讯28at.com

使用场景是:在 Go 程序编译时就能捕获 nil,达到帮助开发人员规避在生产中出现 nil panic 的问题。CI228资讯网——每日最新资讯28at.com

官方认为其具备以下三个重要的特点,让其脱颖而出:CI228资讯网——每日最新资讯28at.com

  1. 完全自动化:该分析工具只需要用户提供标准的 Go 代码就可以使用了。不需要其他任何额外的信息。
  2. 速度快:在设计上,NilAway 保持速度快且可扩展,目标是大型代码库也可以使用。在官方的性能测量中,启用 NilAway 时构建时间开销不到 5%。
  3. 很实用:它不能防止代码中所有可能的 nil panic,但能捕获我们在生产中观察到的大部分潜在 nil panic,从而使 NilAway 在实用性和构建时间开销之间保持良好的平衡。

安装

我们只需要在命令行执行如下命令安装:CI228资讯网——每日最新资讯28at.com

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

nilaway 能够遍历扫描目录下的所有文件:CI228资讯网——每日最新资讯28at.com

$ nilaway ./...

也可以扫描单独的文件:CI228资讯网——每日最新资讯28at.com

$ nilaway demo.go

注:本文安装 @latest 的原因,是因为写此文时 nilaway 还在积极开发阶段,暂时没有发布正式的版本。如果后续有正式版本,也可以指定相应版本号。CI228资讯网——每日最新资讯28at.com

代码示例

案例一

看看如下的代码,是在什么场景下有问题:CI228资讯网——每日最新资讯28at.com

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

在上述代码中,当 someCondition 变量值为 true 时,才会初始化结构体 P。如果 someCondition 变量为 false 时,就会出现空指针调用的 panic 问题。CI228资讯网——每日最新资讯28at.com

NilAway 工具可以捕获这种错误并报告,会报告如下错误:CI228资讯网——每日最新资讯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 来做防御,报告的错误就会消失。CI228资讯网——每日最新资讯28at.com

案例二

看看如下的代码,是为什么有问题:CI228资讯网——每日最新资讯28at.com

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

函数 foo 返回了一个 nil 指针,该指针在函数 bar 中被直接取消引用,导致每当调用函数 bar 时都会出现 panic 问题。CI228资讯网——每日最新资讯28at.com

NilAway 工具也能捕获这类跨函数的的问题,会报告如下错误:CI228资讯网——每日最新资讯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 内跨函数的问题识别,但实际上该工具也嫩能够分析跨 package 的调用。CI228资讯网——每日最新资讯28at.com

总结

今天针对 Go 里最常见的 nil 指针问题进行了静态分析工具 NilAway 的分享。虽然目前该工具还没有正式的生产可用。CI228资讯网——每日最新资讯28at.com

可以明确的是这是大家在 Go 应用上常碰到的场景,可以多加关注后续的更新。另外 NilAway 是基于 go/analysis 标准开发的,后续可以接入 golangci-lint 等相关工具。大家可以继续保持关注!CI228资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-56550-0.htmlUber Go 出了个静态分析工具 NilAway,还挺实用!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

下一篇: 图形编辑器开发:缩放和旋转控制点

标签:
  • 热门焦点
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top