私は成功していないこの質問に対する答えを見つけることを試みてきました。インポートステートメントは、複数のソースファイルでどのように解決されますか?
質問は、パッケージが複数のソースファイルで構成されている場合のGoのインポートステートメントに関するものです。
はのは、私は複数のファイルで構成されていmath
というパッケージがあるとしましょう:
|-- math
|-- add.go
|-- subtract.go
|-- divide.go
|-- multiply.go
のは、math
パッケージは、したがって、それは適切なimport文を必要とfmt
パッケージを利用していると仮定しよう。しかし、我々は4つの別々のファイルを持っているので、我々はfmt
パッケージを複数回(少なくとも私の理解へ)をインポートする必要があります。
// add.go
import "fmt"
// subtract.go
import "fmt"
// divide.go
import "fmt"
// multiply.go
import "fmt"
を今の質問は、パッケージがコンパイルされたときに何が起こるか、ですか?ステートメントは単に一緒にマージされていますか?
もしそうならば、パッケージを何度も(ファイルごとに1回)インポートしなければならないのでしょうか?
私は 'fmt'パッケージを4回インポートすると、コンパイラは同じビルドで4回パッケージをリンクしていないことをどのように確認しますか?インポートステートメントには 'ファイルスコープ'しかないので、コンパイラはインポートされたすべてのライブラリを結合して同じものを2回リンクしないようにしなければならないと思います。 – Rtsne42
コンパイラはすべてのパッケージを一度しかビルドしません。 *どのように*それを行うか知りたければ、コンパイルのソースコードを読んでください。オープンソースで、GitHubで利用可能です(https://github.com/golang/go)。 – Adrian
@ Rtsne42識別子のスコープは、コンパイラとリンカによるパッケージのロード方法とは無関係です。これらのツールは、任意のパッケージを一度ロードするのに十分なほどスマートです。 –