同じディレクトリにライブラリと CLI をバンドルできますか?
ライブラリ (エクスポートされた関数) と、コマンドライン インターフェイス (CLI 実行可能ファイル) は実用的かどうかという疑問を引き起こします。この問題は、Go コンパイラーがプログラムの実行に「main」関数を含むパッケージと、その関数を含むライブラリの両方を必要とする場合に発生します。
問題: 複数のパッケージ
提供された例が示すように、「main」とライブラリ パッケージの両方が同じディレクトリに共存する場合、go コンパイラは同じディレクトリで複数のパッケージが見つかるとエラーを出します。
解決策: ネストされたパッケージ
同じディレクトリにパッケージを維持する代わりに、簡単な解決策は、親ディレクトリ内に新しいサブディレクトリを作成して格納することです。ライブラリまたは CLI パッケージのいずれかです。パッケージの新しい場所を反映するようにインポートを更新してください。
ネストされたパッケージを使用した例
以下の修正された例では、「a」パッケージは次の場所に移動されます。 「so-multipack」ディレクトリ内の新しいサブディレクトリ「a」:
so-multipack/ a/ a.go main.go
更新main.go
package main import "../so-multipack/a" func main() { a.Hello() }
a/a.go を更新しました
package a import "fmt" func Hello() { fmt.Println("hello from a") }
コンパイルが成功しました
更新されたディレクトリ構造を使用して、go コマンドが実行されるようになりました。成功:
go run main.go # Output: hello from a go build # Creates a "so-multipack" executable
同じ親ディレクトリ内にパッケージをネストすることにより、ライブラリと CLI 実行可能ファイルの両方を正常に収容できます。
以上がGo ライブラリと CLI を同じディレクトリにバンドルできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。