cmd/go: diagnose platform-specific identifiers when building for other platforms

jjjwad0x  于 4个月前  发布在  Go
关注(0)|答案(4)|浏览(42)

你使用的Go版本是什么(go version)?

go version go1.10.3 darwin/amd64

这个问题在最新版本的发布中是否重现?

是的

你做了什么?

main.go:

package main

func main() {
	foo()
}

foo_windows.go:

package main

import "fmt"

func foo() {
	fmt.Println("Windows")
}

执行以下命令获取以下错误:

$ GOOS=darwin go build

你期望看到什么?

./main.go:4:2: undefined for darwin_amd64: foo (defined for windows)

你看到了什么?

./main.go:4:2: undefined: foo

上下文

当一位之前没有使用过golang的同事尝试在OSX上编译一些特定于linux的项目时,他们得到了上面的“未定义”错误,并认为项目只是损坏了,而不是平台特定的。如果golang编译器给这个用户一个更好的错误信息,他们很可能会更快地找出自己的问题。
在我看来,当编译器遇到未定义的函数/常量/等等时,如果它能查看该目录中的其他平台特定文件是否在那里定义,那将会非常有用。如果是这样的话,它可以发出更好的错误信息,指出该函数未在你正在编译的特定平台上定义,但在其他平台上已定义(并提及哪些平台)。
考虑我想象中的解决方案,当遇到这种错误时,编译器可能“快速”扫描其他平台的AST,看看那个东西是否在那里定义?特别是,由于这只会在出错时进行,所以不会影响总体的编译性能?
感谢你的考虑。

7fhtutme

7fhtutme1#

这个是否也可以用来构建标签?

6ju8rftf

6ju8rftf3#

这是一项看似收益甚微的工作。否则编译器甚至不会知道那些其他文件的存在(今天它还没有)。我完全不认为复杂度与回报比是适合这种情况的。godoc.org似乎是一个很好的信息发布平台。

m4pnthwp

m4pnthwp4#

在构建我们项目的一个窗口时,我遇到了以下错误。如果错误信息说这是由于条件编译引起的,那它本可以节省我一些时间。
构建 github.com/google/gopacket/afpacket:无法加载 github.com/google/gopacket/afpacket:没有 Go 源文件

相关问题