在 Go 的源代码中哪里可以找到他们的 make
实现。
事实证明,“代码搜索”功能对于语言的这种核心功能几乎毫无用处,而且我没有好的方法来确定我应该搜索 C 函数、Go 函数还是什么。
另外,将来我如何在不求助于这里问的情况下弄清楚这种事情? (即:教我钓鱼)
编辑 附言我已经找到 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
for make(chan ...)
),
适当的运行时调用替换为 cmd/compile/internal/gc/walk.go .如果是 OMAKECHAN
,则为 makechan64
或 makechan
。
最后,在运行代码时,表示替换函数in pkg/runtime被调用。
你是怎么找到这个的
我倾向于通过想象这个过程的哪个阶段来找到这些东西
特定的事情可能会发生。在 make
的情况下,知道没有
pkg/runtime
(最基本的包)中make
的定义,它必须在编译器级别
并且很可能会被其他东西取代。
然后您必须搜索各个编译器阶段(gc、*g、*l)并及时找到 定义。
关于go - 内置源代码位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512781/