我有一个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等工具会失败。
答案 0 :(得分:4)
存储库名为[...]/test.go
,git 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”消息。
可以通过重命名目录来解决问题,以避免构建输出具有将被视为包的一部分的名称。