在Go的源代码中,我可以找到make
的实现。
原来“代码搜索”功能对于语言的这种中心功能几乎没用,我没有办法确定是否应该搜索C函数,Go函数或者什么。
同样在将来,如何在不诉诸此处的情况下弄清楚这类事情? (即:教我钓鱼)
修改 附:我已经找到了http://golang.org/pkg/builtin/#make,但是,与其他go包不同,它不包含指向源的链接,大概是因为它位于编译器域的深处。
答案 0 :(得分:27)
没有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)并及时找到 定义。
答案 1 :(得分:12)