ホームページ > バックエンド開発 > Golang > Go ライブラリと CLI を同じディレクトリにバンドルできますか?

Go ライブラリと CLI を同じディレクトリにバンドルできますか?

Barbara Streisand
リリース: 2024-12-02 20:09:15
オリジナル
726 人が閲覧しました

Can I Bundle a Go Library and CLI in the Same Directory?

同じディレクトリにライブラリと 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート