go 的 len() 和 make() 函数是如何工作的?

How do go's len() and make() functions work?

go 的 len()make() 函数如何工作?由于该语言缺乏对泛型和函数重载的支持,我看不出 func len(v Type) int 是如何实现的。 func make(Type, size IntegerType) Type.

也是如此

我似乎无法在 go 源代码中找到该函数,我找到的最接近的是 this

lenmake 函数是语言规范的一部分,内置于编译器中。 runtime package.

中对内置函数的运行时支持

文件builtin.go仅用于文档。未编译。

由于 Go 的严格类型,编译器总是知道你传递给 len 函数的类型,因此它会针对不同的类型转到不同的函数,这可以在编译时确定。在大多数情况下,您试图获取切片的长度,在这种情况下,len 函数只需要 return 该切片结构的 len 字段(因为切片实际上是一个结构);字符串也一样。

编译器有各种各样的技巧,编译器生成的汇编代码很少遵循您键入的完全相同的逻辑。