package main import ( "fmt" ) func main() { arr := [...]string{"go", "python", "java", "c++", "c"} fmt.Println("arr value ", arr) fmt.Println("------------------------") slice1 := arr[1:3] fmt.Println("slice1 now is ", slice1) fmt.Println("len of slice1 is ", len(slice1), ",cap of sclie1 is ", cap(slice1)) fmt.Println("------------------------") slice2 := append(slice1, "ruby", "obj-c") //如果再添加一个php,那就又是完全不同的另一番景象了。。。 fmt.Println("slice2 is ", slice2) fmt.Println("len of slice2 is ", len(slice2), ",cap of sclie2 is ", cap(slice2)) fmt.Println("after append : slice1 is ", slice1) //底层数组虽然变了,但是slice1的len并没有变化 fmt.Println("len of slice1 is ", len(slice1), ",cap of sclie1 is ", cap(slice1)) fmt.Println("after append : arr value is ", arr) fmt.Println("------------------------") slice1 = slice1[:cap(slice1)] //这回才对了。。。 fmt.Println("after reslice : slice1 is ", slice1) fmt.Println("len of slice1 is ", len(slice1), ",cap of sclie1 is ", cap(slice1)) }
输出结果:
arr value [go python java c++ c] ------------------------ slice1 now is [python java] len of slice1 is 2 ,cap of sclie1 is 4 ------------------------ slice2 is [python java ruby obj-c] len of slice2 is 4 ,cap of sclie2 is 4 after append : slice1 is [python java] len of slice1 is 2 ,cap of sclie1 is 4 after append : arr value is [go python java ruby obj-c] ------------------------ after reslice : slice1 is [python java ruby obj-c] len of slice1 is 4 ,cap of sclie1 is 4
有疑问加站长微信联系(非本文作者)