私は golang が初めてで、現在パッケージとそのインポートの仕組みについて調べています。この輸入に関していくつか質問があります。私はこの投稿を読んでいます(この投稿には 7,000 件以上の「いいね!」が付いているので、正確だと思います。golang パッケージ
と入力すると、Google が最初に表示します)。
私が理解できないことを説明するために、まずプロジェクトの構造がどのようなもので、すべてのファイルの内容がどのようなものであるかを書きます。
リーリーご覧のとおり、3 つのパッケージ (メイン パッケージを含めて 4 つのパッケージ) を持つモジュールがあります。すべてのパッケージの内容は以下のとおりです。
pkg1.go コンテンツ:
リーリーpkg2.go コンテンツ:
リーリーmypkgの内容:
リーリーmain.go コンテンツ:
リーリーしたがって、main.go
には pkg1
と pkg2
が含まれ、pkg1
と pkg2
には両方とも # が含まれます##mypkg。私が引用した記事には次のように書かれています (太字):
リーリー
リーリー
次の手順に従うことを期待しています:
私の場合 (2.1.1)
私の場合 (3.1.1)
リーリー
mypkg は最初のインポート中に 1 回だけ初期化されるようです。 !さらに、グローバル変数 prom は、pkg1 と pkg2 で同じアドレスを持ちます (この場合は
0x8fe360)。
pkg1
で 1 回初期化され、pkg2
でもう 1 回初期化されることを意味します。
私が読んだ内容が間違っている場合、Go のパッケージとモジュールに関する良い記事を持っている人はいますか? から始まるすべてのインポートされたパッケージの推移閉包です。今すぐ:###
これはセットです。インポートされた各パッケージは 1 回だけ含まれます。これは、パッケージ内で変数を定義すると、その変数は 1 回だけ表示されることを意味します。
mypkg のコピーが複数ありません。
以上がgolang パッケージのインポートプロセスはどのように機能しますか?同じモジュール内でパッケージを複数回初期化する方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。