Go 数组 切片 容器

72 阅读1分钟

数组

func main() {
    // 数组的定义
   var arr1 [5]int
   arr2 := [3]int{1, 2, 3}
   arr3 := [...]int{1, 2, 3, 4, 5}
   
   fmt.Println(arr1, arr3, arr2)
    
    // for range 遍历数组
   for i, v := range arr3 {
      fmt.Println(arr3[i] + v)
   }
   
   for _, v := range arr2 {
      fmt.Println(v)
   }
}
  • 数组是值类型
  • [10]int和[20]int是不同的类型
  • 一般不直接使用数组

切片 Slice

func main() {
   arr := [...]int{1, 2, 3, 4, 5, 6}

   // 左闭右开区间 slice相当于arr的一个视图
   fmt.Println(arr[2:5])
   fmt.Println(arr[:5])
   fmt.Println(arr[2:])
   fmt.Println(arr[:])
   //     可以使用Slice修改arr里面的值
   updateSlice(arr[:])

   fmt.Println(arr)

   // ReSlice
   s1 := arr[2:5]
   s1 = s1[2:3]

   // Slice的拓展
   // 可以向后拓展 不可以向前拓展 但是不能超过底层数组cap
}

func updateSlice(s []int) {
   s[0] = 100
}

截屏2022-04-14 21.49.49.png

截屏2022-04-14 21.50.56.png

  • Slice 操作
// append()方法添加元素 当超过caps的长度的时候 就会重新分配更大的底层数组来进行新的Slice
arr2 := [...]int{1, 2, 3, 4, 5, 6}
ss1 := arr2[:2]
ss2 := append(ss1, 100)
fmt.Println(ss2)
fmt.Println(arr2)

// Slice创建
sss1 := []int{1, 2, 3, 4}
sss2 := make([]int, 16)
sss3 := make([]int, 10, 32)
fmt.Println(sss1, len(sss1), cap(sss1))
fmt.Println(sss2, len(sss2), cap(sss2))
fmt.Println(sss3, len(sss3), cap(sss3))

// copy
copy(sss1, sss3)
fmt.Println(sss1, len(sss1), cap(sss1))
fmt.Println(sss3, len(sss3), cap(sss3))

容器map

func main() {
   m := map[string]string{
      "name": "ming",
      "age":  "18",
   }
   fmt.Println(m)

   // 创建map
   m2 := make(map[string]string)
   var m3 map[string]int //empty map
   fmt.Println(m2, m3)   //nil

   // 遍历map
   for k, v := range m {
      fmt.Println(k, v)
   }

   name := m["name"]
   fmt.Println(name)
   if age, ok := m["age"]; ok {
      fmt.Println(age)
   }

   // 删除
   delete(m, "age")
   fmt.Println(m)
}

截屏2022-04-14 22.27.18.png