内置源代码位置

Cri*_*ole 33 go

我可以在Go的源代码中找到它们的实现make.

事实证明,"代码搜索"功能对于语言的这种中心功能几乎没用,我没有办法确定是否应该搜索C函数,Go函数或者什么.

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

编辑 PS我已经找到http://golang.org/pkg/builtin/#make,但是,与其他go包不同,它不包含指向源的链接,可能是因为它位于编译器的深处.

nem*_*emo 28

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

  1. 去代码: make(chan int)
  2. 符号替换: OMAKE
  3. 符号类型检查: OMAKECHAN
  4. 代码生成: runtime·makechan

gc,这是一个有味道的C解析器,make根据上下文解析调用(为了更容易的类型检查).

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

之后,根据所存在的符号(例如,OMAKECHANfor make(chan ...)),在cmd/compile/internal/gc/walk.go中替换相应的运行时调用.在OMAKECHAN这种情况下将是makechan64makechan.

最后,在运行代码,调用pkg/runtime中的替换函数.

你怎么找到这个

我倾向于发现这样的事情主要是通过想象这个特定事物可能发生在过程的哪个阶段.如果make知道没有makein pkg/runtime(最基本的包)的定义,它必须在编译器级别,并且很可能被替换为其他东西.

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


thw*_*hwd 12

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

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