Go语言的切片

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


本文来自:开源中国博客

感谢作者:itfanr

查看原文:Go语言的切片

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。