如何在本地正确编译Golang编译器并运行代码?
如何在本地正确编译Golang编译器并运行代码? 我正在尝试了解如何修改编译器,以便能够为其做出贡献。
我在本地获取了源代码,然后运行了 ./all.bash,得到了编译器二进制文件。当我遇到这些错误时:
./bin/go build main.go
# internal/race
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# unicode/utf8
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# internal/unsafeheader
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# math/bits
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# runtime/internal/sys
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# unicode
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# runtime/internal/atomic
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# sync/atomic
compile: version "go1.16.3" does not match go tool version "go1.16.6"
# internal/cpu
compile: version "go1.16.3" does not match go tool version "go1.16.6"
我需要更改我的 GOPATH 或 GOROOT 吗?它们当前设置为:
GOPATH="/Users/john/.go"
GOROOT="/usr/local/opt/go/libexec"
更多关于如何在本地正确编译Golang编译器并运行代码?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为,如果你正在运行的 go 程序版本与 $GOROOT 中的 go 程序版本不一致,就会出现这个错误。我还没有尝试过,但也许在命令运行前更改 GOROOT 会起作用。试试 GOROOT=./bin ./bin/go build main.go。另外,我看到你或许可以使用现有的 go 安装来调用你新编译的 go 工具,方法是:go build --go ./bin/go main.go(我可能把参数顺序弄混了,但这或许能帮你开始)。
更多关于如何在本地正确编译Golang编译器并运行代码?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是版本不匹配导致的编译错误。问题在于你使用新编译的 Go 1.16.3 编译器,但标准库包缓存是使用系统安装的 Go 1.16.6 编译的。
需要清理旧的包缓存并设置正确的环境变量:
# 清理旧的包缓存
rm -rf $HOME/Library/Caches/go-build
rm -rf $GOPATH/pkg
# 设置使用新编译的编译器
export GOROOT=/path/to/your/go/source # 替换为你的Go源码目录
export PATH=$GOROOT/bin:$PATH
# 重新编译标准库
cd $GOROOT/src
./all.bash
或者更彻底的方法是:
# 完全清理并重新构建
cd /path/to/go/source
git clean -fdx # 注意:这会删除所有未跟踪文件
./all.bash
# 验证版本
./bin/go version
如果不想完全清理,可以只删除 pkg 目录:
cd /path/to/go/source
rm -rf pkg
./make.bash
编译完成后,确保你的环境变量指向新编译器:
export GOROOT=/path/to/your/go/source
export PATH=$GOROOT/bin:$PATH
go version # 应该显示 go1.16.3
这样就能使用新编译的编译器正确运行代码了。

