我可以在 Go 的源代码中的何处找到它们的make.事实证明,“代码搜索”功能对于该语言的这种核心功能几乎毫无用处,而且我没有好的方法来确定我是否应该搜索 C 函数、Go 函数或什么。同样在未来,我如何在不求助于这里的情况下弄清楚这种事情?(即:教我钓鱼)编辑 PS 我已经找到了http://golang.org/pkg/builtin/#make,但是,与其他 go 包不同,它不包含源代码的链接,大概是因为它位于编译器领域的深处.
2 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
没有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
。
最后,在运行代码时,调用pkg/runtime 中的所述替换函数。
你怎么找到这个
我倾向于通过想象这个特定的事情可能发生在过程的哪个阶段来找到这些事情。在 的情况下make
,知道make
in pkg/runtime
(最基本的包)没有定义,它必须在编译器级别,并且可能会替换为其他内容。
然后,您必须搜索各种编译器阶段(gc、*g、*l),并及时找到定义。
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消