Golang數(shù)組和切片的區(qū)別
大綱
- 數(shù)組是固定大小
- 切片不是動(dòng)態(tài)數(shù)組纽门,可以擴(kuò)容
區(qū)別
package main
import "fmt"
func main() {
// -------------------- 數(shù)組 -----------------
// 指定數(shù)組大小
var a1 [5]int
// 自動(dòng)推斷數(shù)組大小
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)