golang笔记

来源:互联网 发布:农村淘宝服务费如何扣 编辑:程序博客网 时间:2024/05/21 15:44

Slice

  1. Slice代表变长的序列,序列中每个元素都有相同的类型。语法和数组很像,只是没有固定长度。
  2. 引用类型 -> “动态数组”
  3. 从概念上来说,slice像一个结构体,这个结构体包含了三个元素:一个指针,指向数组中slice指定的开始位置;长度,即slice的长度;最大长度,也就是slice开始位置到数组的最后位置的参数
  4. 使用len()获取长度,cap()获取容量
  5. 可以直接创建或者从底层数组获取生成
  6. 索引不可以超过被slice的切片的容量cap()值
  1. 和声明array一样,只是少了长度 var fslice []int。声明两个slice -> var aSlice,bSlice []byte
  2. 一般使用make()函数来创建切片 make([]T,len,cap),其中cap可以省略,则和len的值相同
    make([]int,10,20)
  3. append() 返回一个新的切片。如果最终长度未亿加到sliice的容量则返回原始slice,如果超过追加到的sliice的容量则重新分配数组并拷贝原始数据
    a := []int{1,2,3,4,5}    s1 := a[2:5]    s2 := a[1:3]    fmt.Println(s1,s2)    // s2 = append(s2,7,8,9)  // 总长度已经超过cap,所以是一块新的内存区域,没有对原切片进行修改    // s2 = append(s2,7,8) // 总长度没有超过cap,所以对原切片进行了修改    fmt.Println(a)    fmt.Println(s1)
  1. copy(s1,s2) s1是母体,s2是被复制的,把s2从s1的头部开始覆盖
    s1 := []int{1,2,3}    s := []int{9,8,7}    s2 := append(s1,s...)  //...相当于是把切片打散后传入    fmt.Println(s2)
原创粉丝点击