Go 的坑

本文介绍了使用goinstall命令安装Go工具时遇到的cannotfindGOROOTdirectory错误及其解决方案。通过检查和修改环境变量GOROOT的值,解决了执行goinstall命令时报错的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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, 一切正常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值