[关闭]
@NickYu 2015-05-21T05:41:03.000000Z 字数 664 阅读 2150

Golang Slice 操作

Golang Slice


申明变量

  1. var s []int

切片分配
切片是引用类型,仅支持new和make语法分配内存

  1. //分配一个长度为10,容量为10的int切片, make语法
  2. s = make([]int, 10)
  3. s = new([10]int)[:]
  4. //分配一个长度为0,容量为100的int切片 make语法
  5. s = make([]int, 0, 100)
  6. //或者new语法
  7. s = new([2]int)[:0]

边界检测
如果访问超过了切片的边界会导致panic:"runtime error: index out of range"

  1. //分配一个长度为10,容量为10的int切片, make语法
  2. s = make([]int, 10)
  3. s[0] = 1 // runtime error: index out of range

长度和容量
如果切片为nil,则len和cap返回0,否则返回实际长度和容量

  1. fmt.Println("s:", len(s), cap(s))

切片重切

  1. s2 = s[startIndex:endIndex] //获取指定位置的子切片

添加元素
可以使用append在切片尾部增加元素,此时切片的长度和容量都会根据实际需要进行调整,如果容量没有变换,append返回的切片和操作的切片实际指向同一块内存,如果超过容量重新分配过了,则操作的切片和返回的切片会指向不同的内存,而之前的数据len长度的数据会被复制到新的内存块中

  1. // 添加一个元素
  2. s = append(s, 1)
  3. // 添加多个元素
  4. s = append(s, 1, 2, 3)
  5. // 添加另外一个切片
  6. s = append(s, s2...)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注