我在docker容器中运行golang。并且'去工具'无法找到' vet'。你能给我一些如何调试它的想法吗?
我已经使用Dockerfile for 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
然而,当我用
安装govet时go get golang.org/x/tools/cmd/vet
并尝试
bash-4.3# go tool vet
go tool: no such tool "vet"
我有以下环境设置:
$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
bash# go tool
addr2line
api
asm
cgo
compile
dist
doc
fix
link
nm
objdump
pack
pprof
trace
yacc
答案 0 :(得分:1)
警告:从Go 1.12(2019年2月,3.5年后)开始,go tool vet
将完全不可用。只有go vet
。
go vet
命令已被重写,可以用作各种不同源代码分析工具的基础。有关详细信息,请参见golang.org/x/tools/go/analysis
软件包。一个副作用是不再支持
go tool vet
。
必须将使用go tool vet
的外部工具更改为使用go vet
。
使用go vet
代替go tool vet
应该适用于所有受支持的Go版本。作为此更改的一部分,
-shadow
不再提供实验性go vet
选项。
现在可以使用以下方法检查变量阴影:
go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
go vet -vettool=$(which shadow)
答案 1 :(得分:-1)
找出问题所在。看来我错过了在我正在使用的基础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