go切片slice的本质/常用操作

切片之间是不能直接比较的

一个nil值的切片没有底层数组, len(), cap()都为0

切片赋值属于引用传递

s1 := make([]int , 3) //[0 , 0, 0]
s2 := s1//将s1赋值给s2,两者共用同一个底层数组,发生改变时,两个切片由于同源,所以会同时改变
s2[0] = 100
fmt.Println(s1) //[100, 0, 0]
fmt.Println(s2) //[100, 0, 0]

切片的遍历

//for range遍历
for i, v := range s2{
fmt.Println(i , v)
}

append()为切片添加元素

  • 每个切片都会指向一个底层数组,当底层数组不能容纳新元素时就会进行扩容,将切片指向的底层数组更换
s1 := []{"bejiing", "shanghai"}
s1[2] = "guangzhou" //会报数组越界异常
s1 = append(s1, "guangzhou")//调用append函数进行扩容

copy()进行复制

a1 := []int{1, 3, 5}
a2 := a1
var a3 = make([]int , 3 ,3)
copy(a3, a1)
a1[0] = 100// 此时a1,a2被修改, a3不会被修改

从切片中删除元素

a := []int{1,2,3,4,5}
a = append(a[:2], a[3:])// 删除索引为2的元素

你可能感兴趣的:(go切片slice的本质/常用操作)