golang make函数如何才能获得三个参数?

时间:2016-04-01 05:56:27

标签: go

函数make的描述如下:

func make(Type, size IntegerType) Type

当我们使用make进行切片时,有时显示如下:

make([]int, 0, 10) 

所以我的问题是:

make函数如何获取三个参数? size IntegerType不是Vararg。我很困惑......

3 个答案:

答案 0 :(得分:5)

make函数是一组内置函数之一,允许你在Go代码中做一些你无法实现的事情(至少不是干净利落和轻松)。 它有许多重载形式,用于创建地图,通道和切片(请参阅 https://golang.org/ref/spec#Making_slices_maps_and_channels):

您的混淆可能源于https://golang.org/pkg/builtin/#make,其中make显示签名为func make(Type, size IntegerType) Type。 如果您仔细查看该部分,您还会看到make可以有第三个参数的指示:

  

切片:大小指定长度。切片的容量是    等于它的长度。 可以提供第二个整数参数    指定不同的容量;它必须不小于长度,    所以make([] int,0,10)分配一个长度为0且容量为10的切片。

您还可以注意到make也可以在没有整数参数的情况下使用:

  

地图:初始分配是根据大小而不是   结果图的长度为0. 可以省略大小,在这种情况下为a   分配小的起始大小。

     

频道:使用指定的缓冲区容量初始化频道的缓冲区。如果为零,或省略大小,则通道为无缓冲。

答案 1 :(得分:2)

make()函数不是常规函数,是内置函数,是语言规范的一部分。您在builtin包(builtin.make())中看到的内容仅用于文档目的。这不是函数的实际签名。第三个可选参数是容量,只有在您创建切片时才能提供。

规范中描述了Making slices, maps and channels:

make(T, n)       slice      slice of type T with length n and capacity n
make(T, n, m)    slice      slice of type T with length n and capacity m

并在Slice types:

提及
  

使用内置函数T创建给定元素类型make的新的初始化切片值,该函数采用切片类型和指定长度的参数以及可选的容量即可。使用make创建的切片始终会分配返回切片值所引用的新隐藏数组。也就是说,执行

make([]T, length, capacity)
     

产生与分配数组和切片相同的切片,因此这两个表达式是等价的:

make([]int, 50, 100)
new([100]int)[0:50]

答案 2 :(得分:0)

功能make is a builtin function。该功能具有其他功能无法使用的功能。一个是你注意到它需要一个可变数字参数。另一个是第一个参数是一个类型。

function definition func make(Type, size IntegerType) Type仅供参考。它不是函数的实际定义。