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

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

还有,在future ,我怎样才能不必在这里发问就能弄明白这类事情呢?(例如:教我钓鱼)

EDIT 另外,我已经找到了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对应make(chan ...)), 在cmd/compile/internal/gc/walk.go中替换适当的运行时调用.在OMAKECHAN的情况下,这将是makechan64makechan.

最后,当运行代码时,调用所述替代函数in pkg/runtime.

你觉得这个怎么样?

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

然后,您必须搜索各个编译器阶段(gc、*g、*l),最终您会找到 定义.

Go相关问答推荐

如何在Deliverq中高效地传达客户依赖关系?

try 用GitHub操作中的release标签更新version. go文件,但失败了

如何复制*C.char?

Go PQ驱动程序无法使用默认架构进行查询

Golang文本/模板序列范围

如果第一次匹配条件,如何跳过切片中的值

用 fork 替换 Go 依赖:...用于两个不同的模块路径

用接口来模拟amqp091go的困难

这是泛型的有效用例吗?

这是实现超时的常见方法,为什么 time.After 不起作用

如何确定作为函数参数传递的指针是否正在被修改或副本是否正在被修改?

从动态输入中提取字符串,其中部分字符串可能不存在

Golang泛型在用作 map 元素时不起作用

Golang ACMEv2 HTTP-01 挑战不挑战服务器

函数调用中的类型参数panic

如何正确为 Go 中的值设置多种类型?

使用 bolthold 3 条件进行 boltDB 查询

GOENV 只能使用 OS 环境设置

Scanner.Buffer - 最大值对自定义拆分没有影响?

Gin中测试模式有什么用