为了账号安全,请及时绑定邮箱和手机立即绑定

内置源代码位置

内置源代码位置

Go
白衣染霜花 2021-06-25 17:09:43
我可以在 Go 的源代码中的何处找到它们的make.事实证明,“代码搜索”功能对于该语言的这种核心功能几乎毫无用处,而且我没有好的方法来确定我是否应该搜索 C 函数、Go 函数或什么。同样在未来,我如何在不求助于这里的情况下弄清楚这种事情?(即:教我钓鱼)编辑 PS 我已经找到了http://golang.org/pkg/builtin/#make,但是,与其他 go 包不同,它不包含源代码的链接,大概是因为它位于编译器领域的深处.
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

没有make()这样的。简单地说,这正在发生:

  1. 去代码: make(chan int)

  2. 符号替换: OMAKE

  3. 符号类型检查: OMAKECHAN

  4. 代码生成: runtime·makechan

gc,这是一个 go 风格的 C 解析器,make根据上下文解析调用(为了更容易的类型检查)。

此转换在cmd/compile/internal/gc/typecheck.go 中完成

之后,根据存在的符号(例如OMAKECHANfor make(chan ...)),在cmd/compile/internal/gc/walk.go 中替换适当的运行时调用。在OMAKECHAN这种情况下,将是makechan64makechan

最后,在运行代码,调用pkg/runtime 中的所述替换函数。

你怎么找到这个

我倾向于通过想象这个特定的事情可能发生在过程的哪个阶段来找到这些事情。在 的情况下make,知道makein pkg/runtime(最基本的包)没有定义,它必须在编译器级别,并且可能会替换为其他内容。

然后,您必须搜索各种编译器阶段(gc、*g、*l),并及时找到定义。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信