Go工程代码检查工具

原创
07/21 19:04
阅读数 302

bodyclose

项目地址:https://github.com/timakin/bodyclose

一个用于检查http.Get()返回值有没有正确关闭问题:

resp, err := http.Get("http://example.com/")
if err != nil {
	// handle error
}
defer resp.Body.Close() // OK
body, err := ioutil.ReadAll(resp.Body)

deadcode

项目地址:https://github.com/remyoudompheng/go-misc/tree/master/deadcode

检查无用的变量声明工具。

depguard

项目地址:https://github.com/OpenPeeDeeP/depguard

通过自定义依赖包白、黑名单,确保import的包都是可控的。

errcheck

项目地址:https://github.com/kisielk/errcheck

用于检查未检查的error返回值。

funlen

https://github.com/ultraware/funlen

用于检查函数长度,包括函数代码行数和语句行数。

gochecknoinits

项目地址:https://github.com/leighmcculloch/gochecknoinits

禁止包中定义init()函数的工具,真的需要如此吗?

该项目只有数十个star,真的有必要引入吗?我对此持怀疑态度。

goconst

项目地址:https://github.com/jgautheron/goconst

查找代码中出现的多个常量字符串,从而得出可以定义为常量的优化建议。

gocognit

项目地址:https://github.com/uudashr/gocognit

用于检查代码复杂度,有点类似圈复杂度。

gocyclo

项目地址:https://github.com/fzipp/gocyclo

用于检查代码复杂度,类似于gocognit。

godox

项目地址:https://github.com/766b/godox

查找代码注释中的TODOFIX关键字。输出包含这些关键字的注释行。

goimports

项目地址:golang.org/x/tools/cmd/goimports

用于自动增加缺失的import和删除无用的import。 备注:

  • 官方工具,推荐
  • 功能包含gofmt。

golint

项目地址:https://github.com/golang/lint

用于代码风格检查。官方工具。

gosimple

项目地址:https://github.com/dominikh/go-tools/tree/master/simple

Dominik Honnef作品,用于检查可以优化的代码。

注:该工具已经整合到staticcheck中了。

govet

项目地址:github.com/golangci/govet

官方工具,用于检查代码正确性。govet发现的往往是代码的bug。

ineffassign

项目地址:https://github.com/gordonklaus/ineffassign

检查无效赋值,小众工具。

interfacer

项目地址:https://github.com/mvdan/interfacer

建议接口的使用方式,如下代码所示,它会建议函数入参使用接口io.Reader:

func ProcessInput(f *os.File) error {
        b, err := ioutil.ReadAll(f)
        if err != nil {
                return err
        }
        return processBytes(b)
}

注:作者已停止更新此项目,原因是这个工具经常会给出错误的建议,实际使用中帮助不大,所以停止开发。

lll(Line length linter)

项目地址:https://github.com/walle/lll

作用:Line length linter, used to enforce line length in files. Support for only checking go files.

检查代码行数,可以配置允许的行数及忽略的文件。

misspell

项目地址:https://github.com/client9/misspell

作用:Correct commonly misspelled English words... quickly

常见英文拼写错误检查。

prealloc

项目地址:https://github.com/alexkohler/prealloc

作用:prealloc is a Go static analysis tool to find slice declarations that could potentially be preallocated. 检查代码中的切片使用,找出可以预先分配的可能。

scopelint

项目地址:https://github.com/kyoh86/scopelint

作用:scopelint checks for unpinned variables in go programs.

检查循环变量引用问题。

for _, val := range values {
    funcs = append(funcs, func() {
        fmt.Println(val) // 此处可能只打印最后一个值。
    })
}

staticcheck

项目地址:https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck

Dominik Honnef作品,Kubernetes社区在用的工具,非常强大,可以检查很多内容。

作用:staticcheck offers extensive analysis of Go code, covering a myriad of categories. It will detect bugs, suggest code simplifications, point out dead code, and more.

structcheck

项目地址:https://github.com/Manbeardo/structcheck

检查结构体字段的约束条件,支持通过struct的tag定义约束。 Checks that constraints on structs are met. Constraints are read as a comma-delimited list on the 'checks' annotation. Validate constraints by running structcheck.Validate()

type MyJsonObjectType struct {
  NestedObject struct{
    A *int `checks:"NotNil"`
    B *int `checks:"NotNil"`
  }
}

typecheck

TODO:暂未找到出处

unconvert

项目地址:https://github.com/mdempsky/unconvert

The unconvert program analyzes Go packages to identify unnecessary type conversions; i.e., expressions T(x) where x already has type T.

unparam

项目地址:https://github.com/mvdan/unparam

找出函数中未使用的参数。

unused

项目地址:https://github.com/dominikh/go-unused

用于检查未使用变量、函数等。

Dominik Honnef作品,已被整合进了staticcheck。

varcheck

项目地址:https://github.com/opennota/check/tree/master/cmd/varcheck

报告exported 变量和常量。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部