golang.org/x/sys/unix/syscall.go: undefined: unsafe.Slice

糟了,到底是哪个包的升级,导致我编译通不过呢,来看看博主的解决方案

/x/sys@v0.4.0/unix/syscall.go:83:16: undefined: unsafe.Slice

golang 版本低于 1.17 时,go build 时报错

# golang.org/x/sys/unix
../../../go/pkg/mod/golang.org/x/sys@v0.4.0/unix/syscall.go:83:16: undefined: unsafe.Slice

解决否

已解决

方案

在项目 运行 
$ go mod graph | gmchart

gmchart 是一个将依赖可视化展示的工具——https://github.com/PaulXu-cn/go-mod-graph-chart, 安装后通过命令 gmchart 调用。

这里发现了2次引用 golang.org/x/sys, 但是发现在第二级,看不出谁引用了它,别急,我们点击找个点,展开看下。

展开后,发现有三个项目引用了它,这三个项目我在项目中都没有用到呢,那就至于猜了,这里最可疑的就是 grpc-example,那就是 grpc, 估计是高版的grpc依赖了高版本 API

检查项目内 go.mod

go 1.14

require (
    google.golang.org/grpc v1.52.0
)

发现项目内引用的 grpc 版本时 v1.52.0, 打开grpc项目发现,该项目已机遇 go1.17 构建。所以,这里我们需要降低 grpc 的版本

我们要找个 go 1.14 的,那,grpc v1.48.0 就满足 go v1.14 runtime 需求。

所以,回到项目将go.mod 调整如下

go 1.14

require (
    google.golang.org/grpc v1.48.0
)

然后更新加依赖,项目就能构建了。