そのようなものはありませんmake()
。簡単に言えば、これは起こっています:
- 行くコード:
make(chan int)
- 記号の置換:
OMAKE
- シンボルの型チェック:
OMAKECHAN
- コード生成:
runtime·makechan
gc
go フレーバーの C パーサーである は、make
コンテキストに従って呼び出しを解析します (型チェックを容易にするため)。
この変換はcmd/compile/internal/gc/typecheck.goで行われます。
その後、存在するシンボル ( OMAKECHAN
for などmake(chan ...)
) に応じて、適切なランタイム呼び出しがcmd/compile/internal/gc/walk.goに置き換えられます。この場合はまたはOMAKECHAN
になります。makechan64
makechan
最後に、コードを実行すると、pkg/runtime で置換された関数が呼び出されます。
どうやってこれを見つけますか
私は、この特定のことがプロセスのどの段階で発生するかを想像することによって、そのようなことを見つける傾向があります. の場合、(最も基本的なパッケージ)make
の定義がないことを知っていれば、コンパイラ レベルである必要があり、別のものに置き換えられる可能性があります。make
pkg/runtime
次に、さまざまなコンパイラ ステージ (gc、*g、*l) を検索する必要があり、やがて定義が見つかります。