要正确使用包,如何安排目录,文件名,单元测试文件?

Ste*_*Hsu 13 go

我的源文件树是这样的:

/src
  /pkg
    /foo
      foo.go
      foo_test.go
Run Code Online (Sandbox Code Playgroud)

在foo.go里面:

package foo

func bar(n int) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在foo_test.go里面:

package foo

func testBar(t *testing.T) {
    bar(10)
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 包名是否与目录名,源文件名有关?
  2. 如果一个包只有一个源文件,我需要把它放在一个目录中吗?
  3. 我应该把foo.go和foo_test.go放在同一个包中吗?
  4. 在foo_test.go中,因为它与foo.go在同一个包中,所以我没有导入foo.但是当我用6g编译foo_test.go时,它表示bar()未定义.我该怎么办?

liw*_*iwp 8

1 - 语言规范说明如下:

共享相同PackageName的一组文件形成包的实现.实现可能要求包的所有源文件都位于同一目录中.

因此,似乎没有对文件/目录命名的要求,但将形成包的所有文件放在一个目录中会更安全.

2 - 显然文件必须在某个目录中.我假设你的意思是" 我应该把它放在一个子目录中src吗?" 在我看来,根据上面的引言,src如果你真的想要,你可以直接拥有所有文件.

3 - 是的.

4 - 使用 go test