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获取

      

posted @ 2018-01-24 23:19  怪人怪性  阅读(129)  评论(0)    收藏  举报