繁体   English   中英

Go工具无法找到二进制文件。 去工具:没有这样的工具“兽医”

[英]Go tool unable to find binary. go tool: no such tool “vet”

我在docker容器中运行golang。 并且“执行工具”无法找到“兽医”。 您能给我一些如何调试的想法吗?

我使用Dockerfile 1.5作为模板。 https://github.com/docker-library/golang/blob/51d6eacd41fe80d41105142b9ad32f575082970f/1.5/Dockerfile

ENV GOLANG_VERSION 1.5.1
ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-        amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA1 46eecd290d8803887dec718c691cc243f2175fe0

RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
&& echo "$GOLANG_DOWNLOAD_SHA1  golang.tar.gz" | sha1sum -c - \
&& tar -C /usr/local -xzf golang.tar.gz \
&& rm golang.tar.gz

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

但是,当我用

go get golang.org/x/tools/cmd/vet 

并尝试

bash-4.3# go tool vet
go tool: no such tool "vet"

我设置了以下go环境:

$PATH includes $GOPATH/bin /usr/lib/go/bin:/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

bash# go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/go"
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
bash# ls $GOPATH/bin
fgt               go-junit-report   godep             golint            mt-content-blogs  vet   
bash# ls $GOROOT/bin/
go     gofmt

问题的症结在于,即使使用go get golang.org/x/tools/cmd/vet进行安装,go工具也不会列出vet go get golang.org/x/tools/cmd/vet

bash# go tool
addr2line
api
asm
cgo
compile
dist
doc
fix
link
nm
objdump
pack
pprof
trace
yacc

警告:从Go 1.12开始(2019年2月,3.5年后), go tool vet将完全不可用。 只做go vet

请参阅go 1.12发行说明

go vet命令已被重写,可以用作各种不同源代码分析工具的基础。 有关详细信息,请参阅golang.org/x/tools/go/analysis软件包。

副作用是不再支持go tool vet
必须将使用go tool vet外部工具更改为使用go vet
使用go vet代替go tool vet应该可以与所有受支持的Go版本一起使用。

作为此更改的一部分, go vet不再提供实验性-shadow选项。
现在可以使用以下方法检查变量阴影:

go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
go vet -vettool=$(which shadow)

找出问题。 看来我错过了在使用的基本docker映像上安装go工具的方法。

RUN apk --update-cache --allow-untrusted \
--repository http://dl-3.alpinelinux.org/alpine/edge/community/ \
--arch=x86_64 add \
go=${GOLANG_VERSION}-r3 \
go-tools=${GOLANG_VERSION}-r3 \
git \
&& rm -rf /var/cache/apk/* \
&& mkdir -p /go/src /go/bin \
&& chmod -R 777 /go

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM