14

我的源文件树是这样的:

/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.gofoo_test.go放在同一个包里吗?
  4. 在 中foo_test.go,因为它在同一个包中foo.go,所以我没有导入foo. 但是当我用 6g 编译foo_test.go时,它说bar() is undefined. 我该怎么办?
4

1 回答 1

9

1 - 语言规范说明如下:

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

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

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

3 - 是的。

4 - 使用go test

于 2010-02-02T11:25:09.387 回答