首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让go linters忽略vendor/?

如何让go linters忽略vendor/?
EN

Stack Overflow用户
提问于 2016-11-10 23:59:47
回答 9查看 9.1K关注 0票数 9

如何使go vetgofmt和其他Go linter工具忽略vendor/中的第三方文件,最好是具有准确的累积退出状态?

例如,find . -name vendor -prune -o -name '*.go' -exec gofmt -s -w {} \;是否会呈现有意义的退出状态?

EN

回答 9

Stack Overflow用户

发布于 2016-11-11 05:16:51

我通常是这样做的

代码语言:javascript
复制
go fmt $(go list ./... | grep -v /vendor/)
go test $(go list ./... | grep -v /vendor/)

但是自从我开始使用govendor,我发现我可以用govendor做同样的事情,只需要更少的输入

代码语言:javascript
复制
govendor fmt +l // +l is shorthand for local
票数 9
EN

Stack Overflow用户

发布于 2016-11-11 00:28:37

通常go listfind更有帮助:

代码语言:javascript
复制
$ go list ./... 
arp242.net/trackwall
arp242.net/trackwall/cmdline
arp242.net/trackwall/vendor/arp242.net/sconfig
arp242.net/trackwall/vendor/bitbucket.org/pkg/inflect
[..trim..]

如您所见,这将列出当前目录中的所有包名称。我们可以使用grep来过滤vendor目录

代码语言:javascript
复制
$ go list ./... | grep -v /vendor/
arp242.net/trackwall
arp242.net/trackwall/cmdline

如果您想运行几个linter,报告所有错误,并仅在成功时返回0,则可以使用循环和状态变量:

代码语言:javascript
复制
#!/bin/sh

st=0
for pkg in $(go list ./... | grep -v /vendor/); do
    echo "==> $pkg"

    go vet "$pkg"
    [ $? -ne 0 ] && st=1

    golint "$pkg"
    [ $? -ne 0 ] && st=1

    # gofmt works on files, not packages
    gofmt -d "${f#arp242.net/trackwall}"*.go
    [ $? -ne 0 ] && st=1
done
exit $st

它将输出类似如下的内容:

代码语言:javascript
复制
==> arp242.net/trackwall
http.go:71: database/sql.NullString composite literal uses unkeyed fields
exit status 1
/home/martin/gocode/src/arp242.net/trackwall/http.go:70:2: don't use ALL_CAPS in Go names; use CamelCase
/home/martin/gocode/src/arp242.net/trackwall/http.go:75:9: if block ends with a return statement, so drop this else and outdent its block
==> arp242.net/trackwall/cmdline
Exit 1

当然,你并不是第一个有这个问题的人,而且有一些工具基本上和上面的一样,只是更好。gometalinter可能是最广为人知的,我建议您使用这个。它包含一个--vendor开关来忽略供应商目录,这很有帮助:

代码语言:javascript
复制
$ go get -u github.com/alecthomas/gometalinter

$ gometalinter --vendor ./...
helpers.go:25:1:warning: realpath is unused (deadcode)
http.go:32:1:warning: _list is unused (deadcode)
[..trim..]
票数 4
EN

Stack Overflow用户

发布于 2016-11-29 02:36:44

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40531874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档