构建约束排除了所有的Go文件。

59
当我导入"golang.org/x/net/route"时,
它告诉我: "构建约束排除了go/src/golang.org/x/net/routego中的所有Go文件"
我在Windows/Linux上使用VSCode。
我在网上搜索了一下,没有找到类似问题的解决方案。
package main

import (
    "golang.org/x/net/route"
)

{
    rib, _ := route.FetchRIB(0, route.RIBTypeRoute, 0)
    messages, err := route.ParseRIB(route.RIBTypeRoute, rib)
}
13个回答

42

我在Goland中遇到了这个问题(使用WSL2中的源代码和在Windows上运行的Goland)。

我最终通过以下方法解决了这个问题

go clean -modcache

后续的构建将所有东西重新排序。


这解决了我的问题。我明白go会智能地确定要构建哪些文件,如果你设置了GO_OS或像xyz_<OS>.go那样命名文件,就可能会出现一个不幸的事实,即尽管pwd中存在源文件,但没有任何要构建的文件...然而,我不确定删除缓存模块是如何解决这个问题的?发生了什么? - Ari Sweedler
我对Go还比较新,所以我从我的“一般经验”中汲取了一些灵感,并在这里阅读了一些内容后推测,缓存被“搞乱”了。也就是说,我正在使用Golang和控制台安装软件包。如果有一些配置正在进行--正如你所提到的那样--缓存将会“自相矛盾”。再次强调,这只是一个想法!如果我们找到了可重现的东西,我很乐意用适当的解释修改我的答案。 - Andreas Gnyp
这基本上解决了我的问题。运行go mod tidy完成了任务。 - Virmundi

14
我的问题是我在代码中有一个杂项的import "C",而且我正在使用CGO_ENABLED=0进行编译。这个问题很难找到,因为IntelliJ将所有的导入都折叠成了一个语句。

1
临时启用CGO的方式是:env CGO_ENABLED=1 go run main - hmmftg
另外,我需要设置CC=<gcc路径> - undefined

9
我们在使用Goland时遇到了同样的错误,并且可以用这种方式解决。
如果您想在Mac下设置GOOS = linux,只需在文件头中添加此行:// +build linux,amd64,go1.15,!cgo。这意味着我们声明该文件是针对具有以下要求的目标系统的:Linux,AMD64架构,1.15 Go版本和无CGO支持。

更新 08/04/2022

go 1.17之后,go命令现在理解//go:build行,并优先于// +build行。新语法使用布尔表达式,与Go一样,并且应该更少出错。这里有一些详细信息
// go:build (darwin && cgo) || linux
// +build darwin,cgo linux

4

我通过在文件选项卡下执行“使缓存无效”来解决了这个问题。


4
尝试在go/src/golang.org/中删除x文件夹。

3

在我的情况下,我只是意外地用测试文件替换了原始代码,它包含以下注释:

//go:build unittest
// +build unittest

点个赞!这似乎是一个常被忽略的问题。我遇到了相反的问题,也就是我的测试文件没有构建约束来指示它是一个测试文件,所以我的测试文件无法导入我们核心测试文件。在我的情况下,复杂的问题是我的测试文件导入了一个需要启用cgo的包,因此我浪费了很多时间来确保cgo已经启用了所有必要的前提条件。 - Tim

3
如果您的依赖关系需要cgo(默认包括x / net),但系统没有C编译器,则会出现此错误。只需安装gcc即可轻松解决问题。

1
是的,对我来说就是这样。我正在一个新的代码库中工作(而且我对Go也很陌生),我的电脑上没有GCC。我安装了GCC并成功构建了代码。这个错误信息有误导性。 - peterfelts

2
在我的情况下,尝试了go clean -modcache解决方案之后,我还不得不重新启动Goland才能停止对构建约束的抱怨。

1
对我来说,重新启动IntelliJ起了作用。谢谢Martin! - undefined

1

这个错误看起来有些模糊。

在我的情况下,我的项目使用CGO,在环境中设置CGO_ENABLED=0时,出现了这个错误,可以通过取消设置此环境变量或设置CGO_ENABLED=1来解决。


1
在我的情况下,似乎 go get 失败了,并且 GOPATH 中引用的文件夹是空的。检查一下这里报错的库文件夹。here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接