内置源代码位置

时间:2013-08-29 13:47:33

标签: go

在Go的源代码中,我可以找到make的实现。

原来“代码搜索”功能对于语言的这种中心功能几乎没用,我没有办法确定是否应该搜索C函数,Go函数或者什么。

同样在将来,如何在不诉诸此处的情况下弄清楚这类事情? (即:教我钓鱼)

修改 附:我已经找到了http://golang.org/pkg/builtin/#make,但是,与其他go包不同,它不包含指向源的链接,大概是因为它位于编译器域的深处。

2 个答案:

答案 0 :(得分:27)

没有make()。简而言之,这种情况正在发生:

  1. 去代码:make(chan int)
  2. 符号替换:OMAKE
  3. 符号类型检查:OMAKECHAN
  4. 代码生成:runtime·makechan
  5. gc,这是一个有条件的C解析器,根据上下文解析make调用(为了更容易进行类型检查)。

    此转换在cmd/compile/internal/gc/typecheck.go完成。

    之后,取决于有什么符号(例如,OMAKECHANmake(chan ...)), 适当的运行时调用在cmd/compile/internal/gc/walk.go中被替换。如果是OMAKECHAN,则为makechan64makechan

    最后,在运行代码时,会调用替换函数in pkg/runtime

    你如何找到这个

    我倾向于通过想象这个过程的哪个阶段来找到这样的东西 特别的事情可能发生。在make的情况下,知道没有 在make(最基本的包)中定义pkg/runtime,它必须在编译器级别上 并且很可能被其他东西取代。

    然后你必须搜索各种编译器阶段(gc,* g,* l)并及时找到 定义。

答案 1 :(得分:12)

事实上make是在运行时在Go中实现的不同函数的组合。

这同样适用于其他内置插件,例如appendcopy