Open sabey opened 4 years ago
Do Read and Write have the correct signatures? Please include a full example, not a snippet.
The error as shown here is correct: the standard Seek method takes two arguments.
no, Read and Write are different, I only get an error for seek
https://play.golang.org/p/zbCVv7Y8TlE
I just tried it without any reference to io and got the same error:
no, Read and Write are different, I only get an error for seek
Seek is one of the canonical methods that go vet checks, while Read and Write are not: https://github.com/golang/tools/blob/master/go/analysis/passes/stdmethods/stdmethods.go#L74
If you add a "whence int" parameter to your Seek method and change the type of the first return value from io.Reader to int64 vet will be silent: https://play.golang.org/p/7Pbq67pGGl-
Or just change the name of the function.
/cc @alandonovan @josharian @mvdan
I agree that this seems like a correct vet diagnostic. The io.Seeker interface is defined by itself, so it doesn't matter what other methods your named type has defined.
Facing similar issue at my end while testing prometheus as shown below.
./buffer.go:80:34: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) ./buffer.go:188:31: method Seek(int64) bool should have signature Seek(int64, int) (int64, error) ./memoized_iterator.go:71:34: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) ./merge.go:461:31: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) ./series.go:98:31: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) ./buffer_test.go:195:30: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) ./buffer_test.go:219:31: method Seek(t int64) bool should have signature Seek(int64, int) (int64, error) FAIL github.com/prometheus/prometheus/storage [build failed]
@sachinkakatkar Does renaming the method or changing the signature to conform to io.Seeker work for you?
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?go env
OutputWhat did you do?
go vet
What did you expect to see?
no error
I do have the package "io" included, but I do also have a Read and Write method which go vet does not complain about
What did you see instead?
./file.go:286:19: method Seek(offset int64) (io.Reader, error) should have signature Seek(int64, int) (int64, error)