关于go:内置源代码位置


Built-In source code location

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

事实证明,"代码搜索"功能对于这种语言的中心特性几乎是无用的,而且我没有好的方法来确定是否应该搜索C函数、Go函数或什么。

同样,在未来,我如何在不求助于这里的情况下解决这类问题呢?(即:教我钓鱼)

编辑另外,我已经找到了http://golang.org/pkg/builtin/make,但是与其他Go包不同,它没有包含到源代码的链接,大概是因为它在编译器领域的某个深度。


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

  • GO代码:make(chan int)
  • 符号替换:OMAKE
  • 符号排版检查:OMAKECHAN
  • 代码生成:runtime·makechan
  • gc是一个流行的C解析器,它根据上下文解析make调用(以便于类型检查)。

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

    之后,根据符号的不同(例如,OMAKECHAN表示make(chan ...)),在cmd/compile/internal/gc/walk.go中替换适当的运行时调用。如果是OMAKECHAN,则为makechan64makechan

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

    你怎么找到这个的

    我倾向于通过想象这个过程的哪个阶段来发现这些东西可能会发生特别的事情。如果是make,知道没有pkg/runtimemake的定义(最基本的包),必须在编译器级别很可能会被其他东西取代。

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


    实际上,make是运行时在go中实现的不同功能的组合。

    • 为例如make([]int, 10)制作切片

    • 制作地图,例如make(map[string]int)

    • makechan,例如make(chan int)

    这同样适用于其他内置组件,如appendcopy