Golang数组和切片的区别
大纲
- 数组是固定大小
- 切片不是动态数组,可以扩容
区别
- 定义方式不一样
- 初始化方法不一样
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)
作者:笑吧小鸟
链接:https://www.jianshu.com/p/ef5617456b94
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号