数组 Array [类型相同的元素的集合]

  1. [声明]
  2. var variable_name [SIZE] variable_type
  3. -> var a [3]int # int array with length 3
  4. -> a := [3]int{1, 2, 3} // shorthand declaration to create array
  5. -> a := [3]int{12} // 只初始化 第0位 12, 其他位初始化位 0 值
  6. -> a := [...]int{12, 78, 50} // ... makes the compiler determine the length
  7. // 数组的长度是数组类型的一部分
  8. // 数组是值类型而不是引用类型, 当数组变量被赋值时, 将会获得原数组的拷贝
  9. [赋值]
  10. a[0] = 1 # 第0位元素, 赋值 1
  11. b := a[0] # 从第0位元素, 获取值 1
  12. [内置函数]
  13. len(a) # 获取数组长度
  14. [多维数组]
  15. var b [3][2]string
  16. a := [3][2]string{
  17. {"lion", "tiger"},
  18. {"cat", "dog"},
  19. {"pigeon", "peacock"}, //this comma is necessary. The compiler will complain if you omit this comma
  20. }

切片 Slice

[声明]

    :[]T

  -> a := [2]int{76, 77} | var b []int = a[0:1] //creates a slice from a[0] to a[1]
  // a[start:end] 创建了一个从 a[start] 到 a[end -1] 的切片
  // a[:] 缺少开始结束索引值, 这种情况默认索引值为 0 和len(numa)
  -> c := []int{6, 7, 8} //creates and array and returns a slice reference

    :func make([]T, len, cap)
  ->  i := make([]int, 5, 5) # 容量可选, 默认长度相同

  // 数组之上的数据结构, 并不存储任何元素而对现有数组的引用
  // 当若干个切片共享同一个底层数组时,对每一个切片的修改都会反映在底层数组中

[长度]

    :len()

  // 切片的长度是指切片中元素的个数

[容量]

    :cap()

  // 切片的容量是指从切片的起始元素开始到其底层数组中的最后一个元素的个数
  // 切片的长度可以动态的改变(最大为其容量), 任何超出最大容量的操作都会发生运行时错误

[追加元素到切片]

    :append(s []T, x ...T) []T

  -> 

type slice struct {  
    Length        int
    Capacity      int
    ZerothElement *byte # 指向首元素的指针
}

[多维切片]

    :pls := [][]string {{"C", "C++"},{"JavaScript"},{"Go", "Rust"},}

  //  func copy(dst, src []T) int # 创建该切片的一个拷贝, 原先数组释放