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
",
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)
}