golang基础知识总结(2)
Go语言数组和切片
1、数组
声明一个数组:
var arr [5]int //中括号中的数字为数组长度,必须是证书且大于0
初始化一个数组:
var arr [5]int = [5]int{1, 2, 3, 4, 5} var arr1 = [5]int{1, 2, 3, 4, 5} var arr2 = [...]int{1, 2, 3, 4, 5} //...任意个数组元素,自动进行统计元素个数 arr3 := [5]int{1, 2, 3, 4, 5} //:=表示根据数组元素的类型,自动匹配类型
二维数组:
arr := arr[4][4]int{{}, {1}, {1, 2}, {1, 2, 3}}//声明并初始化一个二维数组
2、切片
相对来说,切片的运用比数组在实际中运用的比较广泛,最重要的一个原因在于,内置类型切片是一个动态数组,使用相当灵活
个人对于切片的一些认识:
1、切片是相对于初始数组来说的,可以是初始数组的连续的一部分(必须是连续的),也可以是初始数组的全部,当然也可以定义一个空的切片,但是需要指定切片的长度、容量(可选)。
2、切片中的元素并不是复制初始数组中的元素,只是创建了一个新的切片,直接引用初始数组中的元素。这使得切片操作和数组索引一样高效。修改新切片中的元素的值,初始数组中的对应的元素的值也会发生相应的改变。
3、切片的长度是引用原数组元素的数目。
4、切片的容量是底层数组元素的数目。
5、切片的增长。指的是在不超出其初始数组容量的前提下,增加元素(因为初始数组的容量是固定的,而切片仅仅是初始数组的一部分,最多也就是,初始数组的全部,所以不能超过初始数组的容量)
6、切片的生长。切片的生长其实就是创建一个新的容量更大的切片,将原有的内容复制到新的切片当中,再把新切片赋值给原来的切片。
在此过程中使用到了GO语言的内置函数:copy和append
内置函数copy:将切片当中元素较少的元素复制到切片元素较多的切片当中,返回复制元素的个数。
内置函数append:将数据追加到切片的尾部,必要的话会增加切片的容量最后返回更新的切片。
内置函数len:如果参数是字符串,就返回字符串中字符的个数,如果是数组或切片则返回,数组的长度。
内置函数cap:返回数组或切片的容量
7、定义一个切片
var slice []int //由此可以看出,切片不需要定义长度,数组需要定义长度 var slice1 []int = make([]int, len) slice2 := make([]int, len) slice3 := make([]int, len, capacity) //capacity指定容量,可选填
8、初始化一个切片
var arr [5]int = [5]int{1, 2, 3, 4, 5} slice := arr[startIndex : endIndex] //切片截取startIndex是开始索引,endIndex是结束索引startIndex必须小于endIndex
9、切片的原理
切片实际上是一个数据结构,有三个成员参数,一个指向数组的指针(这个指针就代表整个数组,而不是Java中首元素的地址,注意理解),切片的长度,切片的容量。
切片的长度可以用内置函数len获取,切片的容量可以用内置函数cap获取

浙公网安备 33010602011771号