数组的长度是固定的,并且长度属于数组类型的一部分,这样子,数组就会有很大的局限性
切片就可以完美的解决这个问题
切片是一个拥有相同类型元素的可变性的序列,基于数组的上面的一层封装,引用类型,切片一般用于快速的操作一些数据集合。
// 定义切片
var s1 []int
var s2 []string
s1 = []int{1, 2, 3}
s2 = []string{"北京", "上海", "深圳"}
fmt.Printf("len(s1) %d, cap(s1) %d \n", len(s1), cap(s1))
fmt.Printf("len(s2) %d, cap(s2) %d \n", len(s2), cap(s2))
由数组得到区间
// 由数组得到切片
a := [...]int{1, 3, 5, 7, 9, 11, 13}
s3 := a[0:4]
fmt.Println(s3)
例如:
// 由数组得到切片
a := [...]int{1, 3, 5, 7, 9, 11, 13}
s3 := a[0:4]
fmt.Printf("len(s3) %d, cap(s3) %d \n", len(s3), cap(s3))
// 答案就是 len(s3) 4, cap(s3) 7
// 使用make构造切片 make([]T,size , cap) 已经看到27 切片的本质
s1 := make([]int, 5, 10)
fmt.Printf("len %d, cap %d \n", len(s1), cap(s1))
s1 := []string{"上海", "深圳", "北京"}
// 调用append方法后,必须使用原来切片变量来接受
s1 = append(s1, "湖南",“黄州”)
s1 := []string{"上海", "深圳", "北京"}
// 调用append方法后,必须使用原来切片变量来接受
s1 = append(s1, "湖南")
fmt.Println(s1)
ss := []string{"武汉", "西安", "苏州"}
s1 = append(s1, ss...)
fmt.Println(s1)
//[上海 深圳 北京 湖南]
//[上海 深圳 北京 湖南 武汉 西安 苏州]
a1 := []int{1, 3, 5}
a2 := a1
var a3 = make([]int, 3, 3)
copy(a3, a1) // copy
fmt.Println(a1, a2, a3)
a1 = append(a1[:1], a1[2:]...) // 利用切片的特性进行删除数据
fmt.Println(a1)
func main() {
a1 := [4]int{1, 2, 3, 4}
s := make([]int, 0, 4)
s = append(a1[:1], a1[2:]...)
s[1] = 100
fmt.Println(a1, s)
//[1 100 4 4] [1 100 4]
}
var a = []int{1, 5, 3, 2, 4}
sort.Ints(a[:])
fmt.Println(a)