美文网首页
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总结

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