🌞

Golang系列教程--数组和切片

📜本文内容

🐵数组

  • 相同元素的固定容量的集合,一旦被声明,容量固定,若插入新数据超出数组范围将报错误
  • 数组是值类型
🐒声明方式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
  package main

  import "fmt"

  func main(){
    //1
    var num1 [6] int

    //2
    var num2 [3]int
    num2[0] = 1
    num2[1] = 2
    num2[2] = 3

    //2
    num3 := [3]int{1, 2, 3}

  fmt.Printf("%v\n%v\n%v\n",num1,num2,num3)
  }
1
2
3
  [0 0 0 0 0 0]
  [1 2 3]
  [1 2 3]
🐒遍历方式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
  package main

  import "fmt"

  func main(){
    var nums = [8]int{1,2,3,4,5,6,7,8}

    //内置函数len取长度,通过数组索引做遍历
    for i := 0;i<len(nums);i++{
        fmt.Printf("%d\n",nums[i])
    }

    //使用range遍历,i为下标,v为该下标存储的数值
    for i,v := range nums{
        fmt.Printf("Index:%d\tvalue:%d\n",i,v)
    }
  }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  len方式遍历结果:
    1
    2
    3
    4
    5
    6
    7
    8
  range方式遍历结果:
    Index:0	value:1
    Index:1	value:2
    Index:2	value:3
    Index:3	value:4
    Index:4	value:5
    Index:5	value:6
    Index:6	value:7
    Index:7	value:8

🐵切片

  • 是数组的部分,引用数组的一段内容,实际不存储任何值
  • 对切片的修改即是对引用的数组的修改

    1
    2
    
    nums := [8]int{1,2,3,4,5,6,7,8}
    var s []int = nums[:3]
🐒一个切片例子
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
  // 新建了一个int数组,将数组的引用分配给一个切片
	var array = [...]int{1,2,3,4,5,6,7,8}
  var nums = array[3:5]
	fmt.Printf("length of nums is:%d, the capacity is %d\n ", len(nums), cap(nums))
}
1
length of nums is:2, the capacity is 5
🐒容量和长度
  • 长度:表示当前切片包含的元素个数
  • 容量:表示切片可包含的最多元素个数
  • 上述例子中,nums指向array数组从第3到第5的部分,那么当前nums元素个数为2,nums是从第3个开始的,最多可以到第8个,那么切片的容量最多为5
🐒切片的创建
  • 新建数组,指向数组的部分,如上述例子中
  • make:make([]T, len, cap)

    1
    2
    
    i := make([]int, 2, 5)
    fmt.Println(i)

🐵数组和切片区别

数组 切片
值类型 引用类型
存储数据 不存储数据
长度不可变 长度可变,但有最大容量
updatedupdated2019-12-162019-12-16