go make slice 详解

一、申明slice会发生什么

1.1 申明slice

当我们申明一个slice类型,它实际的值什么?

func TestSlice(t *testing.T) {
    var sl []int
    if sl == nil {
        t.Log("nil")
    }
    t.Log(sl == nil)
    t.Log(len(sl))
    t.Log(cap(sl))
    t.Log(sl)
}

如上我们申明了一个 []int的 slice切片类型
输出如下:

nil
true
0
0
[]

我们看到sl = nil,说明没有分配这个变量内存。

1.2 申明并且赋值一个slice会发生什么

func TestSlice2(t *testing.T) {
    var sl []int = []int{1, 2, 3} //或 sl :=  []int{1, 2, 3}
    if sl == nil {
        t.Log("nil")
    }
    t.Log(sl == nil)
    t.Log(len(sl))
    t.Log(cap(sl))
    t.Log(sl)
}

此时我们赋值了一个slice,输出如下:

false
3
3
[1 2 3]

二、make slice 会发生什么

我们对于第一个代码,在var的时候 增加一个make

func TestSlice3(t *testing.T) {
    var sl []int = make([]int, 0)
    if sl == nil {
        t.Log("nil")
    }
    t.Log(sl == nil)
    t.Log(len(sl))
    t.Log(cap(sl))
    t.Log(sl)
}

输出如下:

false
0
0
[]

sl不再等于nil了,说明分配了内存。

你可能感兴趣的:(go)