我有一个Linux VM,我正在尝试编译一个简单的Go包.使用git将包检索到我的用户目录中:
$ git clone [...]/test.go
Cloning into 'test.go'...
done.
$ cd test.go/
$ ls
main.go
Run Code Online (Sandbox Code Playgroud)
我设置了GOPATH并构建:
$ export GOPATH=$PWD; echo $GOPATH
/home/vagrant/test.go
$ go build
$ ls
main.go test.go*
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是现在当我再次尝试构建时,它失败了:
$ go build
can't load package: package .: read /home/vagrant/test.go/test.go: unexpected NUL in input
Run Code Online (Sandbox Code Playgroud)
在构建之前删除test.go文件将允许它构建.但这很不方便,因为尝试重建包的github.com/codegangsta/gin等工具会失败.
存储库的名称为[...]/test.go,默认容器目录为git clonerepo名称,因此包含目录的名称为test.go\。
来自go help build:
如果软件包是主文件包,并且提供了文件名,则该文件名来自提到的第一个文件名,例如“ go build f1.go f2.go”的f1;没有提供文件(“进行构建”),输出文件名是包含目录的基本名称。
在这种情况下,输出是名为的文件test.go。问题是:
在包含该软件包的目录中,.go,.c,.h和.s 文件被视为该软件包的一部分
期间go build从先前版本所输出如果test.go,存在,它将被视为源文件,触发消息的“在输入意想不到NUL”。
可以通过重命名目录来避免此问题,以避免生成的输出具有将被视为软件包一部分的名称。
| 归档时间: |
|
| 查看次数: |
2706 次 |
| 最近记录: |