美文网首页
Go Vet 常见warning总结

Go Vet 常见warning总结

作者: 风千寻艾 | 来源:发表于2017-11-10 10:00 被阅读0次

go vet是一个用于检查Go语言源码中静态错误的简单工具,消灭go vet扫描出的静态错误,有利于提高代码质量和养成良好的编码习惯,常见go vet错误总结如下:

  1. passes lock by value …

不能传递锁,否则可能导致死锁,如下

func createTest(message chan []byte, lock sync.Mutex){
    ...
}

应将sync.Mutex改为指针* sync.Mutex

  1. … not compatible with reflect.StructTag.Get
  • omitempty表示在打印时若该项为empty则不打印,应将其放在双引号内,如下
type Parameters struct {
    Unit        int `json:"test_unit"`
    MaxInstance int `json:"max_instance",omitempty`
    MinInstance int `json:"min_instance",omitempty`
}

应改为json:"max_instance,omitempty"

  • tag尽量要成pair出现,如下会被扫描
type LoggerConfig struct {
    Level string "level"
    File  string "file"
}

在不影响功能的前提下建议将tag改为pair形式,如:

Level string `json:"level"`
  • tag中不要出现不必要的其他字符,比如空格,如下会报错
  1. 关于print
  • fmt.Println() 这种会自动格式化的函数不要指定输出格式,如 %s,如下,会报错:
    fmt.Println("write failed! %v", err)
  • fmt.Errorf() 这种fmt.xxxf型需要指定输出格式的,请手动指定,如%v,如下,会报错
    return fmt.Errorf("write failed! ", err)
  • result of fmt.Errorf call not used
    fmt.Errorf()不会打印信息,只是格式化构造出一个error,如果想打印日志,请使用logger
    fmt.Errorf("write failed: %v ", err)
    return 
  1. panic会显示抛出异常(相当于java中的throw),panic后的代码为dead code
    if err != nil {
        panic("xxx failed")
        return
    }

如上所示,panic后一行return为dead code

相关文章

  • Go Vet 常见warning总结

    go vet是一个用于检查Go语言源码中静态错误的简单工具,消灭go vet扫描出的静态错误,有利于提高代码质量和...

  • go test & go vet 2022-07-26

    go test in summary, [go test = compile, vet while link, a...

  • go 检查无法运行到的代码块

    go tool vet file.go go document 我们通常所看的文档一般由两部分组成,package...

  • Go 中的 noCopy 机制

    为了防止mutex等对象的拷贝,go 中实现了 noCopy 机制 它并不能阻止编译,但是可以让 go vet 能...

  • go vet 工具的使用

    vet 是 golang 中自带的静态分析工具,可以让我们检查出 package 或者源码文件中一些隐含的错误。 ...

  • go routine 使用外部变量问题

    使用 go vet 检查 参考 https://www.jianshu.com/p/e5f328819d4b[ht...

  • 文章目录

    Go 源码解读篇 《Go源码解读篇》之常见数据结构(list) 《Go源码解读篇》之 Error 工作中知识总结 ...

  • Go 规范指南

    写完代码都必须格式化,保证代码优雅:gofmt goimports 编译前先执行代码静态分析:go vet pat...

  • go常见错误总结

    使用go get下载的golangci-lint一直有问题,无奈只能离线下载包,结果发现直接能用 https://...

  • gin.Default()

    判断runtime的版本,打印日志 [WARNING] Now Gin requires Go 1.6 or la...

网友评论

      本文标题:Go Vet 常见warning总结

      本文链接:https://www.haomeiwen.com/subject/lrjbpxtx.html