发布GO分析器进入测试阶段

69 阅读2分钟

Go编程语言已经在开发者生态系统中掀起了风暴。自2009年创建以来,该语言已经在全球范围内被那些寻找适合微服务架构的轻量级和表达式语言的开发者所采用。它被认为有可能成为下一个企业编程语言

我们非常高兴地宣布DeepSource对Go的支持。Go分析器现在处于测试阶段,我们期待着从你那里得到反馈,使其变得更好。

问题分布

该分析器可以检测到120多种类型的问题,分为以下几类--错误风险、反模式、安全漏洞、性能问题、文档覆盖率和样式违规。

Go issue distribution

下面是对这些类别中的一些样本问题的快速概述。

错误风险

  • 不正确的用法append
  • 在无限循环中使用defer ,这将永远不会执行
  • 无效的正则表达式
  • 赋值到nil 地图

安全漏洞

  • 糟糕的文件权限
  • 与所有接口绑定
  • 源代码中硬编码的凭证
  • 在HTML模板中使用未逃逸的数据

性能问题

  • 将非指针性的数值存储在sync.Pool
  • 以泄漏的方式使用time.Tick
  • 通过字节片对地图进行索引时的优化

反模式

  • 重复的构建约束
  • 捕获信号,如SIGKILLSIGSTOP ,这些信号不能被捕获。
  • 冗余的控制流
  • 缺少错误检查

违反风格

  • 格式不正确的错误字符串
  • 开关语句中错位的default case

开始使用GitHub

用DeepSource分析Go代码是很简单的。只需在版本库根部添加一个.deepsource.toml 文件,告诉 DeepSource 要运行哪些分析器。下面的配置示例将对所有拉动请求持续运行Go分析。

文件.deepsource.toml

version = 1

test_patterns = [
  "tests/*_test.go",
  "**/*_test.go"
]

[[analyzers]]
name = "go"
enabled = true

  [analyzers.meta]
  import_path = "github.com/username/repository"

[[analyzers]]
name = "test-coverage"
enabled = true

跟踪测试覆盖率

你也可以跟踪你的Go代码的测试覆盖率。启用测试覆盖率分析器后(上述步骤),使用DeepSource CLI报告来自任何CI系统的指标:

# Run your tests and generate coverage report
go test -coverprofile=coverage.out

# Install 'deepsource CLI'
curl https://deepsource.io/cli | sh

# Set DEEPSOURCE_DSN env variable from repository settings page
export DEEPSOURCE_DSN=https://[email protected]

# Report coverage artifact to 'test-coverage' analyzer
./bin/deepsource report --analyzer test-coverage --key go --value-file ./coverage.out