为了账号安全,请及时绑定邮箱和手机立即绑定

如何让 go linters 忽略供应商/?

如何让 go linters 忽略供应商/?

Go
婷婷同学_ 2022-04-20 17:44:42
我们如何使go vet、gofmt和其他 Go linter 工具忽略 中的第三方文件vendor/,最好具有准确的累积退出状态?例如,会find . -name vendor -prune -o -name '*.go' -exec gofmt -s -w {} \;呈现有意义的退出状态吗?
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这是我使用的:

golint $(ls -d1 */ | sed s/\\//\\/.../g | grep -v -E "^vendor/" | tr "\n" " ")


查看完整回答
反对 回复 2022-04-20
?
繁花如伊

TA贡献2012条经验 获得超12个赞

我通常会

go fmt $(go list ./... | grep -v /vendor/)
go test $(go list ./... | grep -v /vendor/)

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

govendor fmt +l // +l is shorthand for local


查看完整回答
反对 回复 2022-04-20
?
MYYA

TA贡献1868条经验 获得超4个赞

通常go list比find这里更有帮助:


$ 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..]

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


$ go list ./... | grep -v /vendor/

arp242.net/trackwall

arp242.net/trackwall/cmdline

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


#!/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

这将输出如下内容:


==> 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忽略供应商目录的开关:


$ 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..]


查看完整回答
反对 回复 2022-04-20
  • 3 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信