在尝试构建我的 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 机器上正常编译都会导致相同的文件排除问题,这让我相信是文件本身导致了问题,但我不确定它可能是什么。
有谁知道为什么会这样?
一只甜甜圈
相关分类