环境:go 1.17
append是从len处开始的
s:=make([]int,1)
s=append(s,1)
fmt.Println(s) //[0 1]
解释:len=1,所以,append的时候,会从下标1的地方开始
copy不会进行扩容
a:=[]int{1,2,3,4}
b:=make([]int,0,5)
copy(b,a)
fmt.Println(b) //[] 因为len=0所以,一个也没复制进去
c:=make([]int,1,5)
copy(c,a)
fmt.Println(c) //[1] 因为len=1所以,复制进去了一个
copy的时候,len有多少,则最多能copy多少个
另外一种切片复制的方法
a:=[]int{1,2,3}
b:=append([]int{},a...)
fmt.Printf("a:%p,b:%p",a,b) //a:0xc0000140a8,b:0xc0000140c0 二者地址不一样
切片边便利,边删除
适用于批量请求过滤场景
package main
import "fmt"
/*slice 遍历删除示例*/
func main() {
//定义一个数字切片
ageList := []int{1, 3, 7, 7, 8, 2, 5}
//遍历删除6以下的
for i := 0; i < len(ageList); {
if ageList[i] < 6 {
ageList = append(ageList[:i], ageList[i+1:]...)
} else {
i++
}
}
fmt.Printf("after del:%v", ageList)
}
去除切片首位的item
func TrimItem() {
arr := []uint64{1, 1, 2, 2, 3, 1, 3, 1, 1}
//去除前面的1
for i := 0; i < len(arr); {
if arr[i] == 1 {
arr = append(arr[:i], arr[i+1:]...)
} else {
break
}
}
//去除后面的1
for i := len(arr) - 1; i > 0; {
if arr[i] == 1 {
arr = append(arr[:i])
i--
} else {
break
}
}
fmt.Println(arr) //[2 2 3 1 3]
}