【发布时间】:2020-04-16 01:55:21
【问题描述】:
我正在为 exercism.io 编写练习代码。我的导师说我的代码应该由一些 go lint 来检查,他建议我尝试 golint 和 golangci-lint。
我通过go get -u golang.org/x/lint/golint 安装了 golint,并启动了它:
rustam:hamming $ golint hamming.go
rustam:hamming $
但它什么也不返回。 此外,如果我使用 golangci-lint 也会得到相同的结果——只是什么都没有。我也不知道为什么。
有我的代码,全是样式错误:
// Package hamming is Exercism.io exercise
package hamming
import "errors"
// Distance — Calculating Hamming Distance for two DNA strands
func Distance(a, b string) (int, error) {
if len(a) != len(b) {
return 0, errors.New("Strands should be equal size")
}
if len(a) == 0 || len(b) == 0 {
return 0, nil
}
var hd int = 0
for i := 0; i < len(a); i++ {
if a[i] != b[i] {
hd++
}
}
return hd, nil
}
还有我的 go env:
rustam:hamming $ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/Users/rustam/go/bin"
GOCACHE="/Users/rustam/Library/Caches/go-build"
GOENV="/Users/rustam/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/rustam/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.13.4/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/4j/4rjv22zs1pb68wssv5gn2wfw0000gn/T/go-build148685464=/tmp/go-build -gno-record-gcc-switches -fno-common"
还有我的 ~/.bash_profile
export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin
export PATH=$PATH:$GOPATH/bin
如果您能指出我的错误,我将不胜感激。
【问题讨论】:
-
当 linter 什么都不返回时,这通常意味着它没有发现任何问题。你有理由认为它应该发现问题吗?
-
是的。我的导师发送了他的 linter 执行,并且有一些消息,例如
$ golint hamming.go hamming.go:17:15: should drop = 0 from declaration of var hd; it is the zero value -
我可以在本地确认
golint和golaingci-lint都没有发现该文件有任何问题,使用默认配置。 -
@Volker:这是一个见仁见智的问题,“最佳实践”(如果存在的话)通常是特定于上下文的,你不能指望 linter 总是正确的。
-
你在困惑什么?