【发布时间】:2015-03-28 02:17:26
【问题描述】:
go 的 len() 和 make() 函数是如何工作的?由于该语言缺乏对泛型和函数重载的支持,我看不出func len(v Type) int 是如何实现的。 func make(Type, size IntegerType) Type 也是如此。
我似乎无法在 go 源中找到该函数,我设法找到的最接近的是 this
【问题讨论】:
go 的 len() 和 make() 函数是如何工作的?由于该语言缺乏对泛型和函数重载的支持,我看不出func len(v Type) int 是如何实现的。 func make(Type, size IntegerType) Type 也是如此。
我似乎无法在 go 源中找到该函数,我设法找到的最接近的是 this
【问题讨论】:
len 和 make 函数是语言规范的一部分并内置于编译器中。对内置函数的运行时支持位于 runtime package。
文件builtin.go 仅用于文档。它没有编译。
【讨论】:
len 的确切位置的链接?
由于 Go 的严格类型,编译器始终知道您传递给 len 函数的类型,因此它会针对不同类型转到不同的函数,这可以在编译时确定。在大多数情况下,您试图获取切片的长度,在这种情况下,len 函数只需要为该切片的结构返回 len 字段(因为切片实际上是一个结构);字符串也一样。
编译器有各种各样的技巧,编译器生成的汇编代码很少遵循你输入的完全相同的逻辑。
【讨论】: