瀏覽代碼

添加slice对切割时的测试理解

tangs 5 年之前
父節點
當前提交
97017d6294
共有 1 個文件被更改,包括 48 次插入2 次删除
  1. 48 2
      go_slice/main.go

+ 48 - 2
go_slice/main.go

@@ -1,7 +1,10 @@
 /**
-测试golang slice扩展长度的规则
+1. 测试golang slice扩展长度的规则
+2. 测试golang slice切割后cap的变化
 
-结论, slice cap空间够的时候,cap不变,cap不够的时候,会乘2.
+结论:
+1. slice cap空间够的时候,cap不变,cap不够的时候,会乘2.
+2. slice切割后的cap为原slice切割时的起始位置往后的长度
 */
 package main
 
@@ -9,6 +12,7 @@ import "fmt"
 
 func main() {
 	var ary = make([]int, 1, 1)
+	var strAry []string
 
 	ary[0] = 1
 	fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
@@ -24,4 +28,46 @@ func main() {
 
 	ary = append(ary, 5)
 	fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+
+	fmt.Println("-----------------------------------------")
+
+	ary = make([]int, 3, 3)
+	fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+
+	strAry = make([]string, 3, 3)
+	fmt.Printf("value: %v, len: %v, cap: %v\n", strAry, len(strAry), cap(strAry))
+
+	fmt.Println("-----------------------------------------")
+
+	var subAry []int
+
+	ary = make([]int, 5, 5)
+	subAry = ary[1:4]
+	subAry[0] = 1
+	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
+
+	ary = make([]int, 10, 10)
+	subAry = ary[1:4]
+	subAry[0] = 1
+	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
+
+	ary = make([]int, 10, 10)
+	subAry = ary[0:1]
+	subAry[0] = 1
+	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
+
+	ary = make([]int, 10, 10)
+	subAry = ary[4:5]
+	subAry[0] = 1
+	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
+
+	ary = make([]int, 10, 10)
+	subAry = ary
+	subAry[0] = 1
+	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
+	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
 }