1. 环境的坑
1) 执行 go install 命令时,报 cannot find GOROOT directory
原始报错信息:
Tools environment: GOPATH=/home/one/Documents/GoWorkSpace/GoPath, GOBIN=/home/one/Documents/GoWorkSpace/shell
Installing 1 tool at the configured GOBIN: /home/one/Documents/GoWorkSpace/shell in module mode.
gopls
Installing golang.org/x/tools/gopls@latest FAILED
{
"killed": false,
"code": 2,
"signal": null,
"cmd": "/usr/share/go/bin/go install -v golang.org/x/tools/gopls@latest",
"stdout": "",
"stderr": "go: cannot find GOROOT directory: /usr/lib/go-1.13\n"
}
1 tools failed to install.
gopls: failed to install gopls(golang.org/x/tools/gopls@latest): Error: Command failed: /usr/share/go/bin/go install -v golang.org/x/tools/gopls@latest
go: cannot find GOROOT directory: /usr/lib/go-1.13
用 go env 命令可以查看 go 的执行环境参数,得到的结果具体如下:
one@one:~/Documents/GoWorkSpace/kitex$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN="/home/one/Documents/GoWorkSpace/shell"
GOCACHE="/home/one/.cache/go-build"
GOENV="/home/one/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/one/Documents/GoWorkSpace/GoPath/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/one/Documents/GoWorkSpace/GoPath"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/share/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/share/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.17.6"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="0"
GOMOD="/home/one/Documents/GoWorkSpace/kitex/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build770022958=/tmp/go-build -gno-record-gcc-switches"
从上面返回结果看,GOROOT 明明指向了 /usr/share/go 目录,而报错信息却指向 /lib/go-1.13,其原因在于 go env 命令中可以看到有个参数 GOENV,该参数指向了环境文件,该环境文件的配置项优先级最高。
打开 /home/one/.config/go/env 文件,可以看到具体如下:
CGO_ENABLED=0
GO111MODULE=on
GOARCH=amd64
GOBIN=/home/one/Documents/GoWorkSpace/shell
GOOS=linux
GOPROXY=https://goproxy.cn,direct
GOROOT=/usr/lib/go-1.13
原来问题纠结在这里,把 GOROOT 参数值改为正确的目录,本人目录为 /usr/share/go, 一切正常了。