这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
切片(Slice) 重要!
arr := [...]int {0,1,2,3,4,5,6,7}
s := arr[2,6] //2 3 4 5
s [0] = 10 //arr的值变为[0 1 10 3 4 5 6 7]
复制代码
- Slice 本身没有数据,是对底层array的一个view
- Slice 可以 Reslice
- Slice的扩展
- Slice可以向后扩展,不可以向前扩展
- s[i] 不可以超越len(s), 向后扩展不可以超越底层数组cap(s) ```golang package main import "fmt" func main() { arr := [...]int {1,2,3,4,5,6,7} s1 := arr[2:6] s2 := s1[3:5] fmt.Println("s1= ", s1) //s1 = [2 3 4 5] fmt.Println("s2= ", s2) //s2 = [5 6] }
复制代码


Slice添加元素
• 添加元素时如果超越cap, 系统会重新分配更大的底层数组,原来的数组(可能会被垃圾回收掉)
• 由于值传递的关系,必须接受append的返回值
• s = append(s, val)
• s := make([]int, 16, 32) // len, cap
package main
import "fmt"
func printSlice(s []int) {
fmt.Printf("len=%d,cap=%d",len(s),cap(s))
}
func main(){
s1 := []int{2,4,6,8}
printSlice(s1)
s2 := make([]int, 16)
printSlice(s2)
s3 := make([]int, 10, 32)
printSlice(s3)
//len=4, cap=4
//len=16, cap=16
//len=10, cap=32
}
复制代码
Slice复制元素
copy(destination,source)
Slice删除元素
s2 := []int{2,4,6,8,0,0,0,0,0,0,0}
fmt.Println("Deleting elements from slice") //delete 8
s2 = append(s2[:3],s2[4:]...)
fmt.Println("Popping from front")
front := s2[0]
s2 = s2[1:]
fmt.Println("Popping from back")
tail := s2[len(s2) -1]
s2 = s2[:len(s2) - 1]