为什么"去兽医"这里没有显示错误?

时间:2016-12-08 07:23:04

标签: go

使用以下代码,go vet不会显示"越界"错误,正如我所料:

package main

func main() {
    a := make([]string, 1)
    a[2] = "foo"
}

来自go vet documentation

  

标志:-shift

     

移位等于或长于变量的长度。

如果go vet不是捕获这些错误的工具,那么它是什么?编译和/或测试代码会抓住这个,但我正在寻找一个基于静态分析的工具。

1 个答案:

答案 0 :(得分:3)

通过使用一些启发式方法,Go vet用于捕获可疑的运行时错误。第一段是关于其工作的确切

  

Vet检查Go源代码并报告可疑构造,例如其参数与格式字符串不对齐的Printf调用。 Vet使用的启发式方法并不能保证所有报告都是真正的问题,但它可以找到编译器未捕获的错误。

也在其提到的文件中

  

请注意,该工具不会检查每个可能的问题,并且取决于不可靠的启发式方法。

当您使用可在运行时附加或修改的动态切片时,您使用的用于检查包的代码是非常难以找到的启发式代码。 因此,不能为此考虑完美的启发式。

fmt.Printf("%d", "scsa", "DSD")
那些启发式的东西可以捕捉这样的东西,这完全取决于训练数据是什么。

所以兽医应该是一个工具,可以快速查看是否有一些一般的错误,你已经错过了(如果它被抓住:-))它没有像编译工具或运行时检查器它只是运行一些启发式你写过的飞机代码。

还提供了一些可用检查列表,其中包含一些示例

  

集会声明,   复制锁,   Printf家族,   方法,   结构标签,

等有很多,你可以看到并阅读完整的文档