arguard
v1.0.1
GO的Linter检查对功能警卫(又称合同)的静态调用参数。
假设您有以下功能:
func div ( n , d float64 ) float64 {
if d == 0 {
panic ( "denominator must not be zero" )
}
return n / d
}然后您这样称呼:
div ( userInput , 0. )即使我们不知道userInput ,我们也可以看到此函数调用在运行时会感到恐慌,因为第二个参数始终为零。
Linter使用安全的部分代码执行和黑魔法找到并报告了这些地方。
go install github.com/orsinium-labs/arguard@latestarguard ./...可用标志:
-contracts.follow-imports :将此标志设置为False以不从导入的模块中提取合同。换句话说,只有在合同和功能调用的功能位于同一分析的软件包中,才会报告合同(警卫)违规行为。对于更好的性能很有用。-contracts.report-contracts :为每个检测到的合同发出一条消息。可用于调试,以查看林格是否检测到合同。-arguard.report-errors :设置此标志以显示合同执行期间的失败。默认情况下,如果Arguard未能执行合同,则仅在没有报告任何内容的情况下继续前进。对于调试,了解为什么未报告合同错误。 panic 。analysis.Analyzer示例,请参见Main.Go。