golang之copy

53 阅读1分钟

将两个slice合并到一个总的slice过程中使用copy

	v1Slice := []int{1, 2}
	totalSlice := []int{}
	c := copy(totalSlice, v1Slice)
	fmt.Printf("c:%v\ntotalSlice:%+v\n", c, totalSlice)
	v2Slice := []int{3, 4}
	totalSlice = append(totalSlice, v2Slice...)
	fmt.Printf("\nv1Slice:%+v\n", v1Slice)
	fmt.Printf("\nv2Slice:%+v\n", v2Slice)
	fmt.Printf("\ntotalSlice:%+v\n", totalSlice)

输出:

c:0
totalSlice:[]

v1Slice:[1 2]

v2Slice:[3 4]

totalSlice:[3 4]

发现这个有问题,不是自己想要的: 代码修改为:

	v1Slice := []int{1, 2}
	totalSlice := make([]int, len(v1Slice))
	c := copy(totalSlice, v1Slice)
	fmt.Printf("c:%v\ntotalSlice:%+v\n", c, totalSlice)
	v2Slice := []int{3, 4}
	totalSlice = append(totalSlice, v2Slice...)
	fmt.Printf("\nv1Slice:%+v\n", v1Slice)
	fmt.Printf("\nv2Slice:%+v\n", v2Slice)
	fmt.Printf("\ntotalSlice:%+v\n", totalSlice)

输出:

c:2
totalSlice:[1 2]

v1Slice:[1 2]

v2Slice:[3 4]

totalSlice:[1 2 3 4]


发现copy会copy目标slice元素的个数。所以 totalSlice := make([]int, len(v1Slice)),totalSlice 用make指定slice的长度。