#demo1:
func main() {
var a = [3]int{1, 2, 3}
var b = []int{1, 2, 3}
fmt.Println(a, b) //[1 2 3] [1 2 3]
fmt.Printf("a:%T b:%T\n", a, b) // a:[3]int b:[]int
var c []int
c = a[0:1] //左包含,右不包含
fmt.Println(c) // [1]
fmt.Println(len(c)) //1 切片的长度-元素的数量
fmt.Println(cap(c)) //3 容量-底层数组最大能放多少元素
}
#demo2:
func main() {
var a = []int{}
fmt.Printf("a:%v len:%d cap:%d ptr:%p\n", a, len(a), cap(a), a)
a = append(a, 1)
fmt.Printf("a:%v len:%d cap:%d ptr:%p\n", a, len(a), cap(a), a)
}
#demo3:
切片三要素:地址&、长度len、容量cap
切片支持自动扩容,扩容策略:每一次都是上一次的2倍
a=append(a,1) 内置函数追加元素
切片是引用类型
func main() {
a := []int{1, 2, 3}
b := a //直接赋值
// var c []int //没有申请内存
// c = make([]int, 3, 3)
var c = []int{0, 0, 0}
copy(c, a)
b[0] = 10
fmt.Println(a) // [10 2 3]
fmt.Println(b) // [10 2 3]
fmt.Println(c) // [1 2 3]
}
#demo4:
删除切片元素
func main() {
a := []string{"sh", "bj", "gz"}
a = append(a[:1], a[2:]...) //使用...取出元素,追加至切片中
fmt.Println(a)
}
#得到切片的三种方式
直接声明a:=[]int{1,2,3} len-3 cap-3
基于数组得到切片m:=[5]int b:=m[:] len-3 cap-5
基于切片得到切片b:=a[:2] ken-2 cap-3
#使用make初始化切片
make用于给引用类型申请内存空间
切片必须初始化或者使用append才能使用
var s []int
s=make([]int,len,cap)
初始化时cap尽量大一点