发行版:CentOS
GO更新
在使用go get安装某模块时,报错:
../../pkg/mod/golang.org/x/sys@v0.5.0/unix/syscall.go:83:16: undefined: unsafe.Slice
../../pkg/mod/golang.org/x/sys@v0.5.0/unix/syscall_linux.go:2271:9: undefined: unsafe.Slice
../../pkg/mod/golang.org/x/sys@v0.5.0/unix/syscall_unix.go:118:7: undefined: unsafe.Slice
../../pkg/mod/golang.org/x/sys@v0.5.0/unix/sysvshm_unix.go:33:7: undefined: unsafe.Slice
这个错误表明你的Go版本可能过低。unsafe.Slice
是在Go 1.17中引入的。
在CentOS上升级Go版本:
(1)删除旧版本:
sudo yum remove golang
(2)下载最新版本的Go(All releases - The Go Programming Languagehttps://go.dev/dl/),比如1.20.5,安装在/usr/local/go目录下
wget https://dl.google.com/go/go1.20.5.linux-amd64.tar.gz
(3)解压下载的Go安装包:
sudo tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz
(4)将Go添加到PATH
环境变量。在~/.bashrc
或~/.bash_profile
文件中添加以下行(当你在 ~/.bashrc
或 ~/.bash_profile
文件中修改了配置(例如添加或更改环境变量),你需要使用 source
命令来使更改立即生效)
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc
source ~/.bash_profile
(5)验证版本即可,GOROOT一般默认会给你按好。
go version
GO冲突
/usr/local/go/src/runtime/internal/sys/stubs.go:9:7: PtrSize redeclared in this block
/usr/local/go/src/runtime/internal/sys/arch.go:24:38: previous declaration
/usr/local/go/src/runtime/internal/sys/stubs.go:10:24: undefined: Uintreg
/usr/local/go/src/runtime/internal/sys/stubs.go:16:7: StackGuardMultiplier redeclared in
this block /usr/local/go/src/runtime/internal/sys/arch.go:27:74: previous declaration
这个错误可能是由于Go安装或环境变量设置不正确导致的。
检查GOROOT
环境变量(GOROOT
是 Go 语言安装目录的环境变量。它指向包含 Go 编译器、工具链和标准库的目录。当你使用 go build
、go run
等命令时,Go 会在 GOROOT
目录中查找所需的工具和库文件。在大多数情况下,你不需要手动设置 GOROOT,除非是自定义在非标准目录;GOPATH是放GO项目源代码的,GOPATH
包含三个子目录:src
、pkg
和 bin
)。
解决:卸载原版本,重装,重设置环境变量GOROOT。
(1)卸载当前Go版本:
sudo rm -rf /usr/local/go
(2)下载最新版本的Go安装包(https://go.dev/dl/)。例如,对于Go 1.20.5:
wget https://dl.google.com/go/go1.20.5.linux-amd64.tar.gz
(3)将Go安装到一个新的目录,或者还是创建usr/local/go目录安装:
cd /usr/local
sudo tar -C go -xzf go1.20.5.linux-amd64.tar.gz
(4)更新GOROOT
和PATH
环境变量。在~/.bashrc
或~/.bash_profile
文件中添加以下行
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source ~/.bashrc
source ~/.bash_profile
(5)查看版本OVER:
go version