一尘不染

内置源代码位置

go

我可以在Go的源代码中的哪里找到它们的实现make

事实证明,“代码搜索”功能对于这种语言的主要功能几乎是无用的,而且我没有确定要搜索C函数,Go函数还是什么的好方法。

将来我又如何在不求助于此的情况下解决这类问题?(即:教我钓鱼)

编辑
PS我已经找到了http://golang.org/pkg/builtin/#make,但是,与其余的go包不同的是,它不包含指向源的链接,大概是因为它在编译器领域的深处。


阅读 245

收藏
2020-07-02

共1个答案

一尘不染

没有make()这样的。简而言之,这正在发生:

  1. 输入代码: make(chan int)
  2. 符号替换: OMAKE
  3. 符号类型检查: OMAKECHAN
  4. 代码生成: runtime·makechan

gc,这是一种Go语言风格的C解析器,可make根据上下文解析调用(以简化类型检查)。

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

在此之后,这取决于符号有(例如,OMAKECHANmake(chan ...)),相应的运行时呼叫是取代在CMD /编译/内部/ GC /
walk.go
。在OMAKECHAN这种情况下将是makechan64makechan

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

你怎么找到这个

我倾向于通过想象这个特殊的事情可能发生在过程的哪个阶段来找到这些事情。对于make,在知道makein
的定义pkg/runtime(最基本的软件包)的情况下,它必须处于编译器级别,并且有可能被其他东西所替代。

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

2020-07-02