49

Go のソース コードのどこで の実装を見つけることができますかmake

「コード検索」機能は、このような言語の中心的な機能にはほとんど役に立たないことがわかりました.C関数、Go関数、または何を検索する必要があるかを判断する良い方法がありません.

また、将来、ここで質問せずにこの種のことをどのように理解できますか?(例: 私に釣りを教えてください)

編集 PS 私はすでにhttp://golang.org/pkg/builtin/#makeを見つけましたが、他の go パッケージとは異なり、ソースへのリンクが含まれていません。 .

4

2 に答える 2

47

そのようなものはありませんmake()。簡単に言えば、これは起こっています:

  1. 行くコード:make(chan int)
  2. 記号の置換:OMAKE
  3. シンボルの型チェック:OMAKECHAN
  4. コード生成:runtime·makechan

gcgo フレーバーの C パーサーである は、makeコンテキストに従って呼び出しを解析します (型チェックを容易にするため)。

この変換はcmd/compile/internal/gc/typecheck.goで行われます。

その後、存在するシンボル ( OMAKECHANfor などmake(chan ...)) に応じて、適切なランタイム呼び出しがcmd/compile/internal/gc/walk.goに置き換えられます。この場合はまたはOMAKECHANになります。makechan64makechan

最後に、コードを実行すると、pkg/runtime で置換された関数が呼び出されます。

どうやってこれを見つけますか

私は、この特定のことがプロセスのどの段階で発生するかを想像することによって、そのようなことを見つける傾向があります. の場合、(最も基本的なパッケージ)makeの定義がないことを知っていれば、コンパイラ レベルである必要があり、別のものに置き換えられる可能性があります。makepkg/runtime

次に、さまざまなコンパイラ ステージ (gc、*g、*l) を検索する必要があり、やがて定義が見つかります。

于 2013-08-29T14:01:36.143 に答える
16

実際makeのところ、実行時に Go で実装されたさまざまな関数の組み合わせです。

append同じことが、や などの他のビルトインにも当てはまりますcopy

于 2013-08-29T13:54:26.700 に答える