数组与切片:
在Go语言中,数组更多是“退居幕后”,承担的是底层存储空间的角色;而切片则走向“前台”为底层的存储(数组)打开了一个访问的“窗口”。
因此,我们可以称切片是数组的“描述符”。切片之所以能在函数参数传递时避免较大性能损耗,是因为它是“描述符”的特性,切片这个描述符是固定大小的,无论底层的数组元素类型有多大,切片打开的窗口有多长。
通过上述语句创建的切片,编译器会自动为切片建立一个底层数组,如果没有在make中指定cap参数,那么cap=len,即编译器建立的数组长度为len。
可以通过语法[low: high]创建对己存在数组进行操作的切片,这被称为数组的切片化(slicing):
u := [10]byte{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
s:= u[3:7]
还可以基于已有切片创建新的切片,这被称为切片的reslicing。