8

I have a Linux VM where I am trying to compile a simple Go package. The package was retrieved into my user directory with git:

$ git clone [...]/test.go
Cloning into 'test.go'...
done.
$ cd test.go/
$ ls
main.go

I set up the GOPATH and build:

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

So far so good. But now when I try to build again, it fails:

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

Deleting the test.go file before building will allow it to build. But this is inconvenient because tools like github.com/codegangsta/gin which try to rebuild the package will fail.

1 Answer 1

5

The repository was named [...]/test.go, and the default container directory for git clone is the repo name, so the containing directory is named test.go\.

From go help build:

If the package is main and file names are provided, the file name derives from the first file name mentioned, such as f1 for 'go build f1.go f2.go'; with no files provided ('go build'), the output file name is the base name of the containing directory.

In this case the output is a file called test.go. The problem is:

In the directory containing the package, .go, .c, .h, and .s files are considered part of the package

During a go build if the output from a previous build, test.go, exists, it will be treated as a source file, triggering the 'unexpected NUL in input' message.

The problem can be resolved by renaming the directory to avoid the build output having a name that will be considered part of the package.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.