大纲



  • 数组是固定大小
  • 切片不是动态数组,可以扩容

区别



  • 定义方式不一样
  • 初始化方法不一样



package main

import "fmt"

func main() {

// -------------------- 数组 -----------------
// 指定数组大小
var a1 [5]int
// 自动推断数组大小
a2 := [...]int{1, 2, 3}
// 打印
fmt.Println(a1, a2)

// 按索引赋值
a3 := [...]int{2: 2, 4: 4}
fmt.Println(a3)
// 按索引赋值
a4 := [5]int{2: 2, 4: 4}
fmt.Println(a4)

// -------------------- 切片 -----------------
// 定义切片
var b1 []int
fmt.Println(b1)
// 初始化
b1 = make([]int, 5, 5+3)
fmt.Println(b1)
fmt.Printf("b1=%v,len=%d,cap=%d\n", b1, len(b1), cap(b1))

// 初始化
b2 := make([]int, 3, 5)
fmt.Printf("b2=%v,len=%d,len=%d\n", b2, len(b2), cap(b2))
}


  • 执行结果



[Running] go run main.go

--------------------
[0 0 0 0 0] [1 2 3]
[0 0 2 0 4]
[0 0 2 0 4]
[]
[0 0 0 0 0]
b1=[0 0 0 0 0],len=5,cap=8
b2=[0 0 0],len=3,len=5

[Done] exited with code=0 in 0.237678 seconds


定义不一样



  • 数组定义



var a1 [3]int
var a2 [...]int{1,2,3}


  • 切片定义



var b1 []int
b2 := make([]int, 3, 5)


初始化不同



  • 数组



a1 := [...]int{1,2,3}
a2 := [5]int{1,2,3}


  • 切片



b1 := make([]int, 3,5)