2 つのパッケージは同じディレクトリに存在できますか?
ライブラリとコマンドライン インターフェイス (CLI) の両方を必要とするプロジェクトを開発する場合、同じディレクトリに存在する 2 つのパッケージ間で競合が発生することがよくあります。 Go コンパイラでは、エントリ ポイントとして「func main」を持つ「main」という名前のパッケージが必要であるため、ライブラリと CLI の両方に個別のパッケージを用意することは不可能であると考えられています。
解決策: ネストされたパッケージ構造
ただし、両方のパッケージを同じディレクトリ内の新しいフォルダーに移動することで、この問題を回避できます。 「main.go」ファイル。重要なのは、新しいパッケージが「$GOPATH」内の正しいパスからインポートされていることを確認することです。
例:
更新されたディレクトリ構造を検討してください:
whatever.io/ myproject/ a/ # New folder a.go main.go
「main.go」で、ネストされたパッケージから新しいパッケージをインポートしますパス:
package main import ( "../myproject/a" ) func main() { a.Hello() }
「a.go」で、ライブラリの関数を定義します:
package a import ( "fmt" ) func Hello() { fmt.Println("hello from a") }
ビルドと実行:
今、プロジェクトを正常にビルドして実行できます:
go run main.go # Prints "hello from a" go build # Creates the executable without errors
このソリューションでは、両方のライブラリを使用できます。 (パッケージ "a") と CLI (パッケージ "main") を同じディレクトリに配置し、同じディレクトリに同じ名前の 2 つのパッケージがあることによって生じる競合を解決します。
以上がGo プロジェクトでは、同じディレクトリにライブラリと CLI の両方を含めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。