1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- 1. 测试golang slice扩展长度的规则
- 2. 测试golang slice切割后cap的变化
- 结论:
- 1. slice cap空间够的时候,cap不变,cap不够的时候,会乘2.
- 2. slice切割后的cap为原slice切割时的起始位置往后的长度
- */
- package main
- import "fmt"
- func main() {
- var ary = make([]int32, 1, 1)
- var strAry []string
- ary[0] = 1
- fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
- ary = append(ary, 2)
- fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
- ary = append(ary, 3)
- fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
- ary = append(ary, 4)
- fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
- ary = append(ary, 5)
- fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
- fmt.Println("-----------------------------------------")
- ary = make([]int32, 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 []int32
- // int32占用四个字节, 所以ary, subAry的地址应该也差4
- ary = make([]int32, 0, 5)
- subAry = ary[1:3]
- fmt.Printf("ary addr: %p, subAry addr: %p\n", ary, subAry)
- fmt.Println("-----------------------------------------")
- ary = make([]int32, 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([]int32, 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([]int32, 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([]int32, 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([]int32, 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))
- }
|