切片 slice
- 切片是具有可变长度相同类型的元素序列, 数组是不可变的;
- 切片与数组在声明时的最主要区别就是长度;
- 切片 var slice []string
- 数组 var array [5]string
- 数组是值类型,切片是引用类型
- 切片声明后默认为nil,没有开辟内存空间,不能直接操作切片,需要先初始化,切片只能和nil判等
package main
import "fmt"
func main() {
declareSlice()
makeFunc()
sliceDel()
}
func declareSlice() {
var slice1 = []string {"a", "b", "c", "d"}
fmt.Println(slice1)
fmt.Println(slice1[0])
fmt.Println(slice1[1])
slice1[0] = "A"
fmt.Println(slice1)
slice2 := slice1
slice2[3] = "D"
fmt.Println("slice1: ", slice1)
fmt.Println("slice2: ", slice2)
fmt.Printf("slice1: %p, slice2: %p \n", slice1, slice2)
}
func makeFunc() {
s := make([] int, 0)
fmt.Println(s==nil)
fmt.Printf("%p \n", s)
fmt.Printf("切片长度:%d, 切片容量:%d \n", len(s), cap(s))
s2 := make([] int, 0, 3)
fmt.Printf("%p \n", s2)
fmt.Printf("切片长度:%d, 切片容量:%d \n", len(s2), cap(s2))
s3 := append(s2, 4, 3, 1, 5, 2)
fmt.Println(s3)
fmt.Printf("%p \n", s3)
fmt.Printf("切片长度:%d, 切片容量:%d \n", len(s3), cap(s3))
s4 := make([]int, 0)
s5 := []int{1, 2, 3, 4, 5}
s4 = append(s4, s5...)
fmt.Println(s4)
fmt.Printf("切片长度:%d, 切片容量:%d \n", len(s4), cap(s4))
s6 := make([]int,0)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
s6 = append(s6,1, 2)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
s6 = append(s6, 3, 4)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
s6 = append(s6, 5, 6, 7, 8, 9)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
s6 = append(s6, 10)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
s6 = append(s6, 11)
fmt.Println(s6)
fmt.Println(len(s6), cap(s6))
}
func sliceDel() {
s7 := []int {1, 2, 3, 4, 5, 6, 7}
fmt.Println("s7: ", s7)
n := 2
s8 := s7[0:n]
fmt.Println("s8: ", s8)
s8 = append(s8, s7[n+1:]...)
fmt.Println("s7: ", s7)
fmt.Println("s8: ", s8)
}