Go 1.12 中使用 go get 失败问题排查

Go 1.12 中使用 go get 失败问题排查 我尝试在机器上安装 codesearch,但 go get 返回 no matching versions for query "latest"

go version go1.12.4 linux/amd64

go env 输出:

GOARCH="amd64"
GOBIN=""
GOCACHE="/home/works/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/works/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
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 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build018416735=/tmp/go-build -gno-record-gcc-switches"

这是怎么回事……?


2 回复

abetar0:

GOMOD=“/dev/null”

这确实很奇怪。它应该是空值或者指向当前的 go.mod 文件

你是手动设置了这个变量吗?


这个问题通常是由于 Go 1.12 版本中默认启用了 Go 模块支持,但缺少必要的代理配置导致的。在 Go 1.12 中,当 GOPROXY 环境变量为空时,go get 会尝试直接从版本控制系统获取依赖,但可能会因为网络问题或仓库结构变化而失败。

从你的 go env 输出可以看到 GOPROXY=""GOMOD="/dev/null",这表明:

  1. 没有设置模块代理
  2. 当前不在模块项目中

解决方案是设置 GOPROXY 环境变量,使用公共的 Go 模块代理。

# 临时设置 GOPROXY
export GOPROXY=https://goproxy.io,direct

# 然后重新运行 go get
go get github.com/google/codesearch

或者永久添加到你的 shell 配置文件中:

echo 'export GOPROXY=https://goproxy.io,direct' >> ~/.bashrc
source ~/.bashrc

如果问题仍然存在,可以尝试强制使用旧的 GOPATH 模式:

export GO111MODULE=off
go get github.com/google/codesearch

另外,codesearch 项目可能没有正确配置模块支持。你可以尝试克隆仓库后手动构建:

git clone https://github.com/google/codesearch.git
cd codesearch
go build ./...

对于 Go 1.12,建议升级到更新的 Go 版本,因为 1.12 已经停止支持,新版本在模块管理方面有显著改进。

回到顶部