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。