go len()
和make()
功能如何运作?由于该语言缺乏对泛型和函数重载的支持,因此我看不出func len(v Type) int
是如何可能的。 func make(Type, size IntegerType) Type
也是如此。
我似乎无法在go源中找到该功能,我设法找到的最近的是this
答案 0 :(得分:12)
len
和make
函数是语言规范的一部分,内置于编译器中。内置函数的运行时支持位于runtime package。
文件builtin.go仅用于文档。它没有编译。
答案 1 :(得分:1)
由于Go的严格类型,编译器总是知道你传递给len
函数的类型,所以它转到不同类型的不同函数,可以在编译时确定。在大多数情况下,您试图获取切片的长度,在这种情况下,len
函数只需返回该切片结构的len
字段(因为切片实际上是一个结构) );同样的字符串。
编译器有各种技巧,编译器生成的汇编代码很少遵循您键入的完全相同的逻辑。