为了账号安全,请及时绑定邮箱和手机立即绑定

Go build 忽略文件而不说什么

Go build 忽略文件而不说什么

Go
慕雪6442864 2021-11-22 15:23:31
在尝试构建我的 go 程序的 Windows 版本时,我遇到了一些非常奇怪的行为。我的目录包含:foo.go  foo_windows.go  foo_windows_test.go  foo_unix.go  foo_linux.go  foo_linux_test.go  foo_darwin.go  Windows 构建失败,因为构建忽略了 foo_windows.go,出于某种原因。请注意,// +build任何文件中都没有注释。这是构建文件列表的输出:$ GOOS=linux GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/[foo_darwin.go foo_windows.go foo_windows_test.go]$ GOOS=darwin GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/[foo_linux.go foo_linux_test.go foo_windows.go foo_windows_test.go]$ GOOS=windows GOARCH=amd64 go list -f '{{.IgnoredGoFiles}}' github.com/foo/[foo_darwin.go foo_linux.go foo_linux_test.go foo_unix.go foo_windows.go]显然最后一项是非常错误的。foo_windows.go 不应被忽略。请注意,当直接包含 infoo_windows.go中的方法时foo.go,windows 构建成功,因此它确实排除了该文件,并且该文件包含了良好构建所需的一切。在 mac 上交叉编译和在 windows 机器上正常编译都会导致相同的文件排除问题,这让我相信是文件本身导致了问题,但我不确定它可能是什么。有谁知道为什么会这样?
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我会回答我自己的问题,希望它可以帮助别人。

foo_windows.go由于未表达的构建错误,未包含在构建中。具体来说,foo_windows.go包含C代码,因为CGO_ENABLED=0默认情况下,go并没有尝试编译它,它只是看到文件中有C代码并排除了该文件。设置CGO_ENABLED=1包含在构建中的文件。


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信