
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 サイトの他の関連記事を参照してください。