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

时间:2010-02-02 07:32:59

标签: go

我的源文件树是这样的:

/src
  /pkg
    /foo
      foo.go
      foo_test.go

在foo.go里面:

package foo

func bar(n int) {
    ...
}

在foo_test.go里面:

package foo

func testBar(t *testing.T) {
    bar(10)
    ...
}

我的问题是:

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

1 个答案:

答案 0 :(得分:8)

1 - 语言规范说明如下:

  

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

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

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

3 - 是的。

4 - 使用go test