猿问

从 Go 1.13 升级后使用 Go 1.14 构建时,是什么导致了关于“先前声明”

将我的go安装文件夹升级到Go 1.14


sudo tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz

每次我尝试构建程序时都会收到运行时错误:


~/playground/go/src/hello  go build hello

# runtime/internal/atomic

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:18:6: Load redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:16:24

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:24:6: Loadp redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:22:32

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:30:6: Load64 redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:28:26

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:36:6: LoadAcq redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:34:27

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:41:6: Xadd redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:39:37

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:44:6: Xadd64 redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:42:39

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:47:6: Xadduintptr redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:45:47

/usr/local/go/src/runtime/internal/atomic/atomic_amd64x.go:50:6: Xchg redeclared in this block

    previous declaration at /usr/local/go/src/runtime/internal/atomic/atomic_amd64.go:48:36

我试图降级到版本1.13.8并且build一切run正常。


sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz


~  go version

go version go1.13.8 linux/amd64


~/go  go build hello && go run hello

hello, world

我的操作系统是 Linux Mint 19.2。


绝地无双
浏览 114回答 1
1回答

慕村9548890

当目标目录已用于较旧的Go安装并且某些文件已被重命名(与以前的版本相比)时,此错误是可重现的并且会发生。例如:Go 1.13.8中的文件go/src/runtime/internal/atomic/atomic_amd64x.go已移至Go 1.14go/src/runtime/internal/atomic/atomic_amd64.go中。在不清理目标目录的情况下提取会触发“先前声明”错误,因为func Xchguintptr在go/src/runtime/internal/atomic/atomic_amd64x.go和go/src/runtime/internal/atomic/atomic_amd64.go为避免此类错误,请删除安装文件夹 ( /usr/local/go ) 并重新安装Go 1.14。sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz再次测试:~/go/src/hello  go versiongo version go1.14 linux/amd64~/go/src/hello  go build hello && go run hellohello, world
随时随地看视频慕课网APP

相关分类

Go
我要回答