你使用的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,看看那个东西是否在那里定义?特别是,由于这只会在出错时进行,所以不会影响总体的编译性能?
感谢你的考虑。
4条答案
按热度按时间7fhtutme1#
这个是否也可以用来构建标签?
0g0grzrc2#
@bcmills@rsc
6ju8rftf3#
这是一项看似收益甚微的工作。否则编译器甚至不会知道那些其他文件的存在(今天它还没有)。我完全不认为复杂度与回报比是适合这种情况的。godoc.org似乎是一个很好的信息发布平台。
m4pnthwp4#
在构建我们项目的一个窗口时,我遇到了以下错误。如果错误信息说这是由于条件编译引起的,那它本可以节省我一些时间。
构建 github.com/google/gopacket/afpacket:无法加载 github.com/google/gopacket/afpacket:没有 Go 源文件