数组与切片

数组

初始化

  1. 指定长度
a := [2]int{1,2} // 指定长度和字面量
  1. 不指定长度
a := [...]int{1,2} //不指定长度,有后面的列表来确定其长度
  1. 指定总长度,通过索引初始化, 没有初始化的位置使用默认值
a := [3]int{1:1, 2:3}
  1. 不指定总长度,通过索引初始化, 最后一个索引为总长度,没有初始化的位置使用默认值
a := [...]int{1:1, 2:3, 5:9}

特点

  1. 长度固定,不可以追加元素
  2. 是值类型,赋值或作为函数参数,都是值拷贝
  3. 数组长度是类型的一部分 [10]int 和 [20]int 是不同类型
  4. 可以根据数组创建切片

切片

创建切片

  1. 由数组创建
    array[b:e]
    array 表示数组名,b表示开始索引,可以不指定,默认是0,
    e表示结束索引,可以不指定,默认是数组长度len(array)
    array[b:e] 表示创建 e-b 个元素的切片,第一个元素是 array[b],最后一个元素是 array[e-1]

  2. 由 make 函数创建

// len = 10 cap = 10
a := make([]int, 10)
//len = 10 cap = 15
b := make([]int, 10, 15)

切片操作

  1. len() 返回长度
  2. cap() 返回底层数组容量
  3. append() 追加元素
  4. copy() 复制切片

字符串与切片的转换

str := "hello,世界"
// 转换成字节切片
a := []byte(str)
// 转换成 rune 切片
b := []rune(str)