golangの勉強のためにimport packageで読み込まれるファイルについて調べようとしていた
[wip] golangの勉強のためにimport packageで読み込まれるファイルについて調べようとしていた
はじめに
The Go package sources are intended to serve not only as the core library but also as examples of how to use the language
Effective Goで標準ライブラリのソースを見ることをすごいおすすめされているので、golangの勉強には標準ライブラリのソースを見るのが良さそうというだった。
次にどのパッケージのソースを見るのが良いかという問題が出てくるのだけれど。とりあえず、書き方のようなものが学びたいので、細かい調整や記述がたくさんある方の低レベルな部分よりは、どういう風に既存のパッケージを使っているかが書かれた高レベルな部分を見るのが良さそうなのではないかと思った。
それでは、どのようなパッケージが高レベルものなのかというと、標準ライブラリ全体でのパッケージ間での依存関係を見ればある程度見当が付くような気がした。
パッケージ間の依存関係の調べ方
以下のようなコードで何らかのパッケージを利用できる(下の例の場合は fmt
パッケージ)。
import "fmt`
ところでこの import <package name>
パッケージ名から利用されるファイル群のパスの情報を取得できないとダメなのだけれど、 これ自体は構文なので、同じような機能を持つfake的な関数を作ってあげなければいけない。
言語仕様上importの解釈は実装依存
golangのimport packageで読み込まれるファイルについて、とりあえず言語仕様を見てみると実装依存だった。
The interpretation of the ImportPath is implementation-dependent but it is typically a substring of the full file name of the compiled package and may be relative to a repository of installed packages.
コード上は go/build/build.go
色々中を覗いてみたところ go/build/build.go あたりに書かれていそうだった。
前の記事 で本当に調べたいのはこちらの処理の内容のこと。
具体的には以下の様な形だった。 (つづく)