go - 内置源代码位置

标签 go

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

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

另外,将来我如何在不求助于这里问的情况下弄清楚这种事情? (即:教我钓鱼)

编辑 附言我已经找到 http://golang.org/pkg/builtin/#make ,但与其他 go 包不同,它不包含指向源代码的链接,可能是因为它位于编译器领域的深处。

最佳答案

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

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

gc 是一个 go 风格的 C 解析器,根据上下文解析 make 调用(以便于类型检查)。

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

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

最后,在运行代码时,表示替换函数in pkg/runtime被调用。

你是怎么找到这个的

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

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

关于go - 内置源代码位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512781/

相关文章:

Golang 包被意外删除

go - Html 解析器忽略 img 标签(Golang)

datetime - 时间上的奇怪行为。Go 中的 Parse 函数

go - 如何在 golang 中格式化日期和时间以在 neo4j 查询中使用它?

dictionary - 如何将 interface{} 转换为 map

git - 控制 Go 包版本

go - 在 go 包中公开一个函数

go - for{} 和 for i=0 之间的区别; i++ {} 在进行中

go - HTTPS连接在浏览器中显示“隐私”错误。 -球童服务器

Golang 简单用户输入产品数学问题,如 3*2*1 = 6