是什么原因造成了#build;#39;输入'中的意外NUL失败了?

时间:2014-12-09 00:09:25

标签: go

我有一个Linux VM,我正在尝试编译一个简单的Go包。使用git:

将包检索到我的用户目录中
$ git clone [...]/test.go
Cloning into 'test.go'...
done.
$ cd test.go/
$ ls
main.go

我设置了GOPATH并构建:

$ export GOPATH=$PWD; echo $GOPATH
/home/vagrant/test.go
$ go build
$ ls
main.go test.go*

到目前为止一切顺利。但是现在当我再次尝试构建时,它失败了:

$ go build
can't load package: package .: read /home/vagrant/test.go/test.go: unexpected NUL in input

在构建之前删除test.go文件将允许它构建。但这很不方便,因为尝试重建软件包的github.com/codegangsta/gin等工具会失败。

1 个答案:

答案 0 :(得分:4)

存储库名为[...]/test.gogit clone的默认容器目录是repo名称,因此包含的目录名为test.go\

来自go help build

  

如果包是main并且提供了文件名,则为文件名   派生自上面提到的第一个文件名,例如'go build'的f1   f1.go f2.go'; 没有提供文件('go build'),输出文件   name是包含目录的基本名称。

在这种情况下,输出是一个名为test.go的文件。问题是:

  

在包含该软件包的目录中, .go ,。c,.h和.s 文件被视为软件包的一部分

go build期间,如果前一个版本的输出test.go存在,则会将其视为源文件,触发“输入中的意外NUL”消息。

可以通过重命名目录来解决问题,以避免构建输出具有将被视为包的一部分的名称。