定义
func main() {
//定义一个切片
arr := [...]int{1, 2, 3, 4}
//表示截取arr的[1,3)
sArr := arr[1:3]
fmt.Println(sArr) //2,3
sArr[0] =10
fmt.Println(sArr)//10,3 用于是引用变量, 所以修改切片也会修改数组
fmt.Println(arr)// 1,10,3,4
}
func main() {
//定义一个切片
arr := [...]int{1, 2, 3, 4}
//表示截取arr的[1,3)
sArr := arr[1:3]
fmt.Println(sArr) //2 ,3
}
type slice struct{
p *[len]int
len int //切片长度
cap int //切片容量
}
创建切片
使用切片时, 必须初始化
var slice []int //slice未初始化 [], len == 0
fmt.Println(slice)
slice[0] = 20// len == 0 panic
fmt.Println(slice)
方式一: 截取数组
func main() {
arr := [4]int{1,2,3,4}
slice1 := arr[0:2] // 截取[0,2)
fmt.Println(slice1)
}
sliceslice
方式二: make
capacity >= lengthmakemakeslice
func main() {
//slice2 := make([]int, 3)len 3,缺省cap, 默认cap == len
slice2 := make([]int, 3,10)//len 3 , cap 10, cap >= len
fmt.Printf("slice2 %v, capacity %v, len %v",slice2,cap(slice2),len(slice2))
}
slice
方式三: slice[]{}
make(type, len)cap == len
func main() {
var str []string = []string{}//等价 var str = []string{}
strings := []string{"tom","Jack","Lucy"}//区别于数组arr := [3]int{1,2,3}
fmt.Printf("strings %v, len %v,cap %v",strings,len(strings),cap(strings))
}
遍历切片
方式一: 普通for循环
func main() {
slice := []string{"a","b","c","d"}
for i := 0; i < len(slice); i++ {
fmt.Printf("%s",slice[i])
}
}
方式二: for - range
func main() {
slice := []string{1: `world`, 0: `hello`}
for idx, val := range slice {
fmt.Printf("%d, %s
", idx, val)
}
}
注意事项
func main() {
arr := [4]int{1, 2, 3, 4}
slice := arr[:2] //如果从0开始,等价于 arr[0:2]
fmt.Println(slice)
slice = arr[1:] //如果到len(arr),等价于 arr[1:len(arr)]
fmt.Println(slice)
slice = arr[:]//如果从0到len(arr),等价于 arr[0:len(arr)]
fmt.Println(slice)
}
func main() {
arr := [4]int{1, 2, 3, 4}
slice1 :=arr[:]
fmt.Println(slice1)
//切片可以继续切片
slice2 := slice1[:3]
fmt.Println(slice2)
-------------------------
arr := [3]int{100,200,300}
slice1 := arr[:]
slice2 := slice1[:]
fmt.Println(slice1,slice2)
slice2[0] = 400
fmt.Println(slice1,slice2)
}
func main() {
slice := []int{100,200,300}
fmt.Println(slice)
//append返回一个新的切片
slice = append(slice, 400, 500)
fmt.Println(slice)
-----------------------
slice1 := []int{100, 200, 300}
slice2 := []int{400, 500}
//追加一个切片到slice
slice1 = append(slice1, slice2...)
fmt.Println(slice1)
}
func main() {
slice1 := []int{100,200,300}
slice2 := make([]int,5)
fmt.Println(slice2)
//将slice1拷贝到slice2
copy(slice2,slice1 )
fmt.Println(slice2)
}