在Go的源代码中,我可以在哪里找到make
的实现.
事实证明,"代码搜索"功能对于这种语言的核心特性几乎毫无用处,而且我没有很好的方法来确定应该搜索C函数、GO函数还是什么.
还有,在future ,我怎样才能不必在这里发问就能弄明白这类事情呢?(例如:教我钓鱼)
EDIT 另外,我已经找到了http://golang.org/pkg/builtin/#make个,但与Go软件包中的睡觉不同,它没有包含到源代码的链接,大概是因为它位于编译器领域的某个深处.
在Go的源代码中,我可以在哪里找到make
的实现.
事实证明,"代码搜索"功能对于这种语言的核心特性几乎毫无用处,而且我没有很好的方法来确定应该搜索C函数、GO函数还是什么.
还有,在future ,我怎样才能不必在这里发问就能弄明白这类事情呢?(例如:教我钓鱼)
EDIT 另外,我已经找到了http://golang.org/pkg/builtin/#make个,但与Go软件包中的睡觉不同,它没有包含到源代码的链接,大概是因为它位于编译器领域的某个深处.
没有这样的make()
个.简单地说,这正在发生:
make(chan int)
OMAKE
OMAKECHAN
runtime·makechan
gc
是一个GO风格的C解析器,它根据上下文解析make
调用(为了更容易进行类型判断).
此转换在cmd/compile/internal/gc/typecheck.go秒内完成.
在此之后,根据存在什么符号(例如,OMAKECHAN
对应make(chan ...)
),
在cmd/compile/internal/gc/walk.go中替换适当的运行时调用.在OMAKECHAN
的情况下,这将是makechan64
或makechan
.
最后,当运行代码时,调用所述替代函数in pkg/runtime.
我倾向于找到这样的东西,主要是通过想象这是在这个过程的哪个阶段
特别的事情可能会发生.在make
的情况下,在知道没有
pkg/runtime
(最基本的软件包)中make
的定义,它必须是编译器级别的
很可能会被其他东西取代.
然后,您必须搜索各个编译器阶段(gc、*g、*l),最终您会找到 定义.