durcheck
is a very simple linter which detects potential bugs with
time.Duration
in a Go package.
Consider the following code:
func doInTime(done chan struct{}) error {
select {
case <-time.After(60):
return errors.New("timeout")
case <-done:
return nil
}
}
There is obviously a problem with time.After(60)
, where untyped int is
actually converted to 60 nanoseconds. But a programmer can miss it, or a
Golang newcomer from languages like PHP where sleep function has signature
int sleep ( int $seconds )
can make such mistake.
Running the linter against the code above will produce an error:
$ durcheck .
main.go:14:9: implicit time.Duration means nanoseconds in "time.After(60)"
go get -u github.com/hypnoglow/durcheck
Option A: pass these arguments to gometalinter
command:
gometalinter --linter=durcheck:durcheck:PATH:LINE:COL:MESSAGE --enable=durcheck ./...
Option B: add this configuration to your .gometalinter.json
file:
{
"Enable": [
"durcheck"
],
"Linters": {
"durcheck": {
"Command": "durcheck",
"Pattern": "PATH:LINE:COL:MESSAGE"
}
}
}