To use package properly, how to arrange directory, file name, unit test file?

go

Solution

1 - The language spec says the following:

A set of files sharing the same PackageName form the implementation of a package. An implementation may require that all source files for a package inhabit the same directory.

So it seems that there is no requirement on the naming of files / directories, but it would be safer to put all file that form a package in one directory.

2 - Obviously the file must be in some directory. I assume you mean "should I put it in a subdirectory of `src`?" It seems to me based on the above quote that you could have all your files in `src` directly if you really wanted to.

3 - Yes.

4 - Use `go test`

Problem

My source files tree is like this: ``` /src /pkg /foo foo.go foo_test.go ``` Inside `foo.go`: ``` package foo func bar(n int) { ... } ``` inside `foo_test.go`: ``` package foo func testBar(t *testing.T) { bar(10) ... } ``` My questions are: - Does package name relates to directory name, source file name? - If there is only one source file for a package, need I put it in a directory? - Should I put `foo.go` and `foo_test.go` in the same package? - In the `foo_test.go`, as it's in the same package as `foo.go`, I didn't import `foo`. But when I compile `foo_test.go` with 6g, it says `bar() is undefined`. What should I do?

Original source