失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Golang】排查 Build constraints exclude all the go files 的几个思路

【Golang】排查 Build constraints exclude all the go files 的几个思路

时间:2020-05-13 07:20:37

相关推荐

【Golang】排查 Build constraints exclude all the go files 的几个思路

输出该问题时说明在 Go 语言的启动编译(Build)阶段,出现了编译问题,往往是编译配置的问题。可以通过以下思路去排查对应的错误。

一、查看 go env 😶‍🌫️

(1)首先可以查看被排除的 Go 文件是否启用了条件编译,通常的形式为在文件的首行添加(以 Linux 为例):

// +build linux// 或//go:build linux

// +build会逐渐取代//go:build,但 go 1.16 之前的版本只支持//go:build。加上上述条件编译后,该 Go 文件将只在 Linux 操作系统环境下才会被编译,若是 MacOS 和 Windows 环境下将无法被编译。解决方案是在 go env 和代码编辑器中都配置好 GOOS 参数(VSCode 在左下角的 GO/env 中设置;GoLand 在左上角的 settings 中配置)。

go env -w GOOS=linux

(2)若非操作系统环境的问题,接着考虑是否有交叉编译,即在 Go 语言编译时调用了其他语言的情况,一般是 C 语言。此时需要在 go env 中开启 CGO_ENABLED 特性。这样在进行 go build 时,就会在编译和链接阶段启动 gcc 编译器。(经评论指出,开启 CGO_ENABLED 需要下载对应操作系统的 gcc 库)

go env -w CGO_ENABLED=1

二、依赖包的依赖是否未导入 ⚙️

在 go 的旧版本中基于 GOPATH 来寻找依赖,但可能依赖包的依赖未导入,可以考虑打开 GO111MODULE,实现模块支持。go 命令行会使用modules,而完全不去 GOPATH 目录下查找模块。

go env -w GO111MODULE=on

三、是否存在重复依赖的情况 🔂

这是我最终排查出的错误,因为在 GoLand 的 settings 中可以存在三个 GOPATH,分别是 Global、Project 和 Module 的 GOPATH。

Global 在 go env 中配置,Project 是项目的 GOPATH。若配置了多个 GOPATH,在导入二方或三方包时,可能在多个 GOPATH 下都有对应的缓存模块,即重复依赖。此时需要删除多余的 GOPATH。

如果觉得《【Golang】排查 Build constraints exclude all the go files 的几个思路》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。