Golang编译错误:版本"go1.13"与go工具版本"go1.13.8"不匹配

Golang编译错误:版本"go1.13"与go工具版本"go1.13.8"不匹配 我是一个Go语言新手 尝试在我的Mac上进行构建 遇到了这个错误,我已经通过brew卸载并重新安装了Go

prometheus-exporter-netapp (master) $ make
/Library/Developer/CommandLineTools/usr/bin/make clean
rm -rf target
/Library/Developer/CommandLineTools/usr/bin/make build-all
/Library/Developer/CommandLineTools/usr/bin/make build-darwin
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -a -tags netgo -ldflags ‘-w’ -o target/darwin/prometheus-exporter-netapp

unicode/utf8

编译:版本 “go1.13” 与 go 工具版本 “go1.13.8” 不匹配

encoding

编译:版本 “go1.13” 与 go 工具版本 “go1.13.8” 不匹配

gitlab $ echo $PATH
/Users/mark.pendrick/gocode/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
gitlab $ echo $GOPATH
/Users/mark.pendrick/gocode
gitlab $

更多关于Golang编译错误:版本"go1.13"与go工具版本"go1.13.8"不匹配的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

为什么不从 https://golang.org/dl/ 安装 Go?

更多关于Golang编译错误:版本"go1.13"与go工具版本"go1.13.8"不匹配的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


@Mark_Pendrick

很可能你的系统上安装了两个标准库,一个来自原始的Go安装,另一个来自brew安装。Go工具使用$GOROOT来查找标准库,显然$GOROOT指向了错误的位置。

  • 运行 go env GOROOT。对于通过Homebrew安装的Go,它应该指向 /usr/local/Cellar/go/1.13.8/libexec。如果不是,请相应地修改你shell中的GOROOT环境变量,然后看看错误是否消失。
  • 通常,你会希望移除旧Go安装的所有残留文件。brew install go 不会自动卸载其他(即:非brew)的Go安装。

另请参阅:

stackoverflow.com

github.com/golang/go

(通过网页搜索找到:"compile: version" "does not match go tool version"

@lutzhorn 通过brew安装Go本身并没有什么问题。我使用brew安装Go已经很多年了,并且一直用得很愉快 🙂

这个问题是由于系统中存在多个Go版本导致的版本不匹配。错误信息显示编译器期望的是go1.13,但实际找到的是go1.13.8

首先检查系统中安装的Go版本:

# 查看当前使用的Go版本
go version

# 查看所有已安装的Go版本位置
which -a go

通常这个问题是因为通过多种方式安装了Go(比如brew和官方安装包)。需要清理旧的Go安装:

# 1. 完全卸载brew安装的Go
brew uninstall --force go
brew cleanup

# 2. 删除可能存在的其他Go安装
sudo rm -rf /usr/local/go
sudo rm -rf /usr/local/bin/go

# 3. 清理GOPATH中的旧版本缓存
rm -rf $GOPATH/pkg

# 4. 重新安装Go(选择一种方式)
# 方式A:使用brew重新安装
brew install go

# 方式B:或从官网下载安装
# 访问 https://golang.org/dl/ 下载安装包

如果问题仍然存在,检查环境变量:

# 查看GOROOT设置
echo $GOROOT

# 临时清除GOROOT(如果设置了错误的路径)
unset GOROOT

# 确保PATH正确,Go的bin目录应该在PATH中
export PATH="/usr/local/go/bin:$PATH"

对于Makefile项目,可以尝试强制使用特定版本:

# 在Makefile中添加版本检查
GO_VERSION := $(shell go version | cut -d' ' -f3)

# 或者在构建时指定
go build -a -tags netgo -ldflags '-w' -o target/darwin/prometheus-exporter-netapp

如果项目使用了go modules,清理mod缓存:

go clean -modcache

最后验证安装:

# 确认版本一致
go version
go env GOVERSION

这两个命令应该输出相同的版本号。如果仍然不匹配,可能是系统中残留了旧的Go安装文件,需要手动查找并删除:

# 查找所有go可执行文件
find /usr/local -name "go" -type f 2>/dev/null
find /usr -name "go" -type f 2>/dev/null
回到顶部