2 回答

TA贡献1853条经验 获得超18个赞
在 Go 中,最少的检查可能是 Go 工具go fmt
、、、go vet
和golint
。
这是一个最小的、可重现的示例(请参阅如何创建一个最小的、可重现的示例),它表明您的hamming.go
程序通过了所有当前检查。
$ go version
go version devel +075c20cea8 Thu Dec 26 13:53:31 2019 +0000 linux/amd64
$ go fmt hamming.go
$ go vet hamming.go
$ go get -u golang.org/x/lint/golint
go: downloading golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f
go: found golang.org/x/lint/golint in golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f
go: downloading golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f
go: golang.org/x/tools upgrade => v0.0.0-20191226230302-065ed046f11a
go: downloading golang.org/x/tools v0.0.0-20191226230302-065ed046f11a
$ golint hamming.go
$ cat hamming.go
// 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
}
$
评论:我的导师发送了他的 linter 执行,并且有一些消息,例如
$ golint hamming.go hamming.go:17:15:
should drop = 0 from declaration of var hd; it is the zero value
– 锈迹斑斑
您的导师正在使用旧版本的golint. 对于当前版本,它们应该运行
go get -u golang.org/x/lint/golint
您的导师是否解释了 的有限目的golint?例如,“Golint 并不完美,同时存在误报和误报。不要将其输出视为黄金标准。”
目的
Golint 与 gofmt 不同。Gofmt 重新格式化 Go 源代码,而 golint 打印出样式错误。
Golint 与 govet 不同。Govet 关注正确性,而 golint 关注编码风格。Golint 在 Google 中使用,它寻求与开源 Go 项目的公认风格相匹配。
golint 提出的建议正是:建议。Golint 并不完美,同时存在误报和误报。不要将其输出视为黄金标准。我们不会添加编译指示或其他旋钮来抑制特定警告,因此不要期望或要求代码完全“无 lint”。简而言之,这个工具不是而且永远不会足够值得信赖,以至于它的建议可以自动执行,例如作为构建过程的一部分。Golint 为 Effective Go 和 CodeReviewComments wiki 页面中列出的许多机械检查项目提供建议。
这是我的解决方案尝试:
package hamming
import "errors"
// Distance returns the Hamming distance for two DNA strings of equal length.
// DNA strings are constructed from the alphabet {A, C, G, T}.
func Distance(a, b string) (int, error) {
if len(a) != len(b) {
return 0, errors.New("strings should be of equal length")
}
d := 0
for i := 0; i < len(a); i++ {
if a[i] != b[i] {
d++
}
}
return d, nil
}

TA贡献1833条经验 获得超4个赞
您应该定义置信水平(min_confidence参数)。
例如:golint -min_confidence 0 your_file_to_test
查看 golint 用法:
golint -h
Usage of golint:
golint [flags] # runs on package in current directory
golint [flags] [packages]
golint [flags] [directories] # where a '/...' suffix includes all sub-directories
golint [flags] [files] # all must belong to a single package
Flags:
-min_confidence float
minimum confidence of a problem to print it (default 0.8)
-set_exit_status
set exit status to 1 if any issues are found
- 2 回答
- 0 关注
- 240 浏览
添加回答
举报