升级Go 1.14后构建报‘previous declaration at’运行时内部错误的原因
解决Go 1.14安装后构建出现函数重复声明的错误
你碰到的这个编译错误,核心原因是升级Go版本时没有彻底清理旧的安装目录,导致新旧版本的代码文件混合冲突了。
具体原因分析
Go 1.14开始为AMD64架构添加了扩展指令集(比如AVX2)的支持,新增了atomic_amd64x.go文件来实现对应指令集下的原子操作。而你直接用tar解压覆盖旧目录时,旧版本(比如Go 1.13)的atomic_amd64.go文件没有被完全替换掉,两个文件里的Load、Xadd等原子操作函数声明完全重复,编译器自然就报出了“redeclared”的错误。
正确的升级步骤
要彻底解决这个问题,你需要按照以下步骤重新安装Go 1.14:
- 彻底删除旧的Go安装目录,确保没有残留文件:
sudo rm -rf /usr/local/go - 解压Go 1.14的安装包到指定目录:
sudo tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz - 验证安装是否成功:
确认输出显示go versiongo version go1.14 linux/amd64 - 回到你的项目目录重新构建,之前的重复声明错误应该就会消失了。
额外提醒
直接用tar覆盖解压Go安装包是个容易踩的坑——因为旧目录里的某些文件可能因为权限、文件属性等原因没有被新版本文件替换,导致代码文件混合。所以每次升级Go版本时,都建议先彻底删除旧的/usr/local/go目录,再安装新版本,这样能避免大部分类似的兼容性问题。
内容的提问来源于stack exchange,提问作者Andrea Baldini
相关产品推荐
相关产品推荐

