golang切片


func test5(){
	//切片
	// 原始切片data:=make([]string, 5, k)
	//newSlice = data[i:j]的
	// 长度=j-i,  容量=k-i
	data := []string{"a", "b", "c", "d", "e"}
	newsLice := data[2:4]
	fmt.Println(len(newsLice), cap(newsLice))
	fmt.Printf("%+v", newsLice)
}

func test6(){
	//切片的第三个索引值用来限制容量
	data := []string{"a", "b", "c", "d", "e"}
	newSlice := data[1:2:5]

	newSlice = append(newSlice, "f")
	fmt.Println(data) // newSlice := data[1:2:2]
	// 如果不限制newSlice的长度和容量相等,append的时候
	// 会改变底层数据的值,导致data变为:[a b f d e]
	// newSlice len:1, cap:4, [b]
	fmt.Printf("newSlice len:%d, cap:%d, %+v", len(newSlice), cap(newSlice), newSlice)
}

func test7(){
	a:=[]int{1,2}
	b:=[]int{3,4}
	a=append(a, b...)
	fmt.Println(a)
	for i,v:=range a{
		fmt.Printf("index:%d, v-addr:%x, elem-addr:%x\n",
			i, &v, &a[i])
	}
	/*
	v的地址总是一样的
	[1 2 3 4]
index:0, v-addr:c000010100, elem-addr:c00000e340
index:1, v-addr:c000010100, elem-addr:c00000e348
index:2, v-addr:c000010100, elem-addr:c00000e350
index:3, v-addr:c000010100, elem-addr:c00000e358
	*/
}

func test8(a []int){
	//a[1] = 9 //引用传递main中的a编程[1,9]
	a = append(a, 3) //如果原始a的长度=容量,会重新创建一个新的副本.return a
}

func main(){
	a:=[]int{1,2}
	test8(a)
	fmt.Println(a)
}
posted @ 2020-04-07 01:01  nanaindi  阅读(108)  评论(0编辑  收藏  举报