1、数组
数组是一系列相同数据类型、固定长度的数据项集合,不同长度的相同数据类型的数组属于不同类型,例如:[5]int和[10]int属于不同类型。
数组的长度一旦声明,不可以动态改变,需要动态改变参考切片的使用。数组长度上限为2GB。
数组的下标从0开始,上限为数组的长度-1。
//声明数组var arr1 [5]int//遍历数组,取数组长度,元素赋值for i:=0; i < len(arr1); i++ {//元素赋值arr1[i] = i * 2}//遍历数组,取数组长度,取出元素for i:=0; i < len(arr1); i++ {//取出元素fmt.Printf("Array at index %d is %d\n", i, arr1[i])}//for-range遍历数组,取出元素for i := range a {//取出元素fmt.Printf("Array at index %d is %d\n", i, arr1[i])}
2、切片
2.1、用法一:对数组连续片段的引用
从数组中取出一个连续的片段作为切片,切片是一个引用类型,对切片元素的值进行修改,会影响到原数组的元素值。var slice1 []type = arr1[start:end] ,切片slice1 是由数组 arr1 从 start 索引到 end-1 索引之间的元素构成的子集。var slice1 []type = arr1[:] ,切片slice1 就等于完整的 arr1 数组。var slice1 []type = arr1[2:] , 切片slice1 是由数组从第三个到最后的所有元素。var slice1 []type = arr1[:3] , 切片slice1 是由数组从第一个到第三个元素。
var arr1 [6]intvar slice1 []int = arr1[2:5]
切片有两个内置函数len()和cap()。len()用来获取切片已有元素的长度。cap()用来获取切片最大伸展长度,上限为切片从数组来源的start下标到数组末尾的长度。举例:
arr1 := [5]int{0, 1, 2, 3, 4}slice1 := arr1[1:2]fmt.Println(cap(slice1))//输出4//因为切片slice1的开始位置是数组arr1第2位,数组arr1最大长度为5,所以slice1伸展长度是从第2位到数组的末尾。
2.2、用法二:集合
声明切片时,不指定长度,可以动态的改变切片的大小,长度上限为2GB。
//声明切片sl3 := []int{1, 2, 3}//添加元素sl3 = append(sl3, 4, 5, 6)fmt.Println(sl3)
2.2.1、复制切片
sl_from := []int{1, 2, 3}sl_to := make([]int, 10)n := copy(sl_to, sl_from)fmt.Println(sl_to)fmt.Printf("Copied %d elements\n", n) // n == 3
