main.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. 1. 测试golang slice扩展长度的规则
  3. 2. 测试golang slice切割后cap的变化
  4. 结论:
  5. 1. slice cap空间够的时候,cap不变,cap不够的时候,会乘2.
  6. 2. slice切割后的cap为原slice切割时的起始位置往后的长度
  7. */
  8. package main
  9. import "fmt"
  10. func main() {
  11. var ary = make([]int, 1, 1)
  12. var strAry []string
  13. ary[0] = 1
  14. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  15. ary = append(ary, 2)
  16. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  17. ary = append(ary, 3)
  18. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  19. ary = append(ary, 4)
  20. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  21. ary = append(ary, 5)
  22. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  23. fmt.Println("-----------------------------------------")
  24. ary = make([]int, 3, 3)
  25. fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  26. strAry = make([]string, 3, 3)
  27. fmt.Printf("value: %v, len: %v, cap: %v\n", strAry, len(strAry), cap(strAry))
  28. fmt.Println("-----------------------------------------")
  29. var subAry []int
  30. ary = make([]int, 5, 5)
  31. subAry = ary[1:4]
  32. subAry[0] = 1
  33. fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  34. fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
  35. ary = make([]int, 10, 10)
  36. subAry = ary[1:4]
  37. subAry[0] = 1
  38. fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  39. fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
  40. ary = make([]int, 10, 10)
  41. subAry = ary[0:1]
  42. subAry[0] = 1
  43. fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  44. fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
  45. ary = make([]int, 10, 10)
  46. subAry = ary[4:5]
  47. subAry[0] = 1
  48. fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  49. fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
  50. ary = make([]int, 10, 10)
  51. subAry = ary
  52. subAry[0] = 1
  53. fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
  54. fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
  55. }