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. パッケージのソース ファイルが 1 つしかない場合、それをディレクトリに配置する必要がありますか?
  3. foo.gofoo_test.goを同じパッケージに入れる必要がありますか?
  4. では、foo_test.goと同じパッケージに入っているためfoo.go、インポートしませんでしたfoo。しかし、foo_test.go6gでコンパイルすると、 bar() is undefined. 私は何をすべきか?
4

1 に答える 1

9

1 - 言語仕様には次のように記載されています。

同じ PackageName を共有する一連のファイルは、パッケージの実装を形成します。実装では、パッケージのすべてのソース ファイルが同じディレクトリに存在する必要がある場合があります。

したがって、ファイル/ディレクトリの命名に関する要件はないようですが、パッケージを形成するすべてのファイルを 1 つのディレクトリに配置する方が安全です。

2 - 明らかに、ファイルは何らかのディレクトリにある必要があります。「のサブディレクトリに入れるべきsrcですか?」という意味だと思います。上記の引用に基づいて、src本当にしたいのであれば、すべてのファイルを直接入れることができるように思えます。

3 - はい。

4 - 使用go test

于 2010-02-02T11:25:09.387 に答える