ライブラリを提供する(いくつかのfuncsをエクスポートする)プロジェクトがあり、コマンドラインインターフェイスも提供する必要があります(実行可能ファイルが必要です)。
ディレクトリ構造の例:
whatever.io/
myproject/
main.go
myproject.go
Goコンパイラーは、実行を開始するためにpackage mainおよびfunc mainを必要とします。私のライブラリには、package myprojectが必要です。これは、myprojectをインポートしようとする別のプロジェクトをビルドするときにgoツールが言うことです。
main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject
だから私はそれを行う方法はないと信じています。
ライブラリまたはCLIを別のパッケージに移動する必要がありますか?
Main.goの同じディレクトリ内の新しいフォルダー内にパッケージを移動するだけです。 $ GOPATHの参照から新しいパッケージをインポートすることを忘れないでください。
例:
user@user:~/p/go/test/so-multipack$ ls -R
.:
a main.go
./a:
a.go
user@user:~/p/go/test/so-multipack$ cat main.go
package main
import (
"../so-multipack/a"
)
func main(){
a.Hello()
}
user@user:~/p/go/test/so-multipack$ cat a/a.go
package a
import (
"fmt"
)
func Hello(){
fmt.Println("hello from a")
}
user@user:~/p/go/test/so-multipack$ go run main.go
hello from a
user@user:~/p/go/test/so-multipack$ go build
user@user:~/p/go/test/so-multipack$ ls
a main.go so-multipack
user@user:~/p/go/test/so-multipack$
便利なリンク:
ディレクトリごとに2つのパッケージを持つことはできないため、エラーが発生します。だから、@ Larry Battleがあなたのmyproject.go
新しいディレクトリに。
Goコードはワークスペース内に保持する必要があります。ワークスペースは、ルートに3つのディレクトリがあるディレクトリ階層です。
srcには、パッケージ(ディレクトリごとに1つのパッケージ)に編成されたGoソースファイルが含まれています、
pkgにはパッケージオブジェクトが含まれ、
binには実行可能なコマンドが含まれています。
ほとんどの場合、no。ただし、単体テストの例外があります。
1つのディレクトリ(mypackage
)に2つの異なるパッケージ(mypackage
とmypackage_test
)があります。コンパイラはこれについて文句を言いません。
mypackage folder:
mypackage/
foo.go
foo_test.go
mypackage/foo.go:
package mypackage
func Add(a int, b int) int {
return a + b
}
mypackage/foo_test.go:
package mypackage_test
// Unit tests...
2つのパッケージには次の名前が必要です。
_test
。_test
パッケージ内のファイルの名前は、_test.go
で終わる必要があります
found packages "foo" and "bar"
の行に沿って紛らわしいコンパイラエラーを受け取っている場合は、おそらくこれらのルールの1つ以上に違反しているでしょう。