我可以在Go的源代码中找到make
的实现。
事实证明,“代码搜索”功能对于语言的这种中心功能几乎没用,我没有办法确定是否应该搜索C函数,Go函数或者什么。
同样在将来我如何在不诉诸此处的情况下弄清楚这种事情? (即:教我钓鱼)
编辑P.S.我已经找到了http://golang.org/pkg/builtin/#make,但是,与其他go包不同,它不包含指向源的链接,大概是因为它位于编译器区域的某个深处。
这样没有make()
。简而言之,这种情况正在发生:
make(chan int)
OMAKE
OMAKECHAN
runtime·makechan
gc
,一个去味道的C解析器,根据上下文解析make
调用(为了更容易的类型检查)。
此转换在cmd/compile/internal/gc/typecheck.go中完成。
之后,根据有什么符号(例如OMAKECHAN
的make(chan ...)
),在cmd/compile/internal/gc/walk.go中替换相应的运行时调用。在OMAKECHAN
的情况下,这将是makechan64
或makechan
。
最后,在运行代码时,调用替换函数in pkg/runtime。
我倾向于发现这样的事情主要是通过想象这个特定事物可能发生在过程的哪个阶段。在make
的情况下,知道make
(最基本的包)中没有pkg/runtime
的定义,它必须在编译器级别上,并且可能被替换为其他东西。
然后,您必须搜索各种编译器阶段(gc,* g,* l),并及时找到定义。