go-slice

#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尽量大一点
posted @ 2020-07-10 21:51  kylingx  阅读(116)  评论(0编辑  收藏  举报