Golang:go(&)的len()和make()函数如何工作?

时间:2015-01-29 00:07:26

标签: function types go

go len()make()功能如何运作?由于该语言缺乏对泛型和函数重载的支持,因此我看不出func len(v Type) int是如何可能的。 func make(Type, size IntegerType) Type也是如此。

我似乎无法在go源中找到该功能,我设法找到的最近的是this

2 个答案:

答案 0 :(得分:12)

lenmake函数是语言规范的一部分,内置于编译器中。内置函数的运行时支持位于runtime package

文件builtin.go仅用于文档。它没有编译。

答案 1 :(得分:1)

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

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