您的位置 首页 golang

golang nil slice & empty slice 笔记


示例代码

package mainimport (    "fmt")func main() {    a := []string{"A", "B", "C", "D", "E"}    a = nil    fmt.Println(a, len(a), cap(a))}

result: [] 0 0 说明: a 是 一个nil 的slice


package mainimport (    "fmt")func main() {    a := []string{"A", "B", "C", "D", "E"}    a = a[:0] //空的slice    fmt.Println(a, len(a), cap(a))}

result [] 0 5 说明 a是长度是0的emtpy slice

nil slice vs empty slice

  • nil slice 的长度len和容量cap都是0
  • empty slice的长度是0, 容量是由指向底层数组决定
  • empty slice != nil
  • nil slice的pointer 是nil, empty slice的pointer是底层数组的地址

slice的底层表示形式

[pointer] [length] [capacity]
nil slice:   [nil][0][0]empty slice: [addr][0][0] // pointer是底层数组的地址

创建nil slice和empty slice

package mainimport (    "fmt")func main() {    var nilSlice []string    emptySlice0 := make([]int, 0)    var emptySlice1 = []string{}    fmt.Printf("\nNil:%v Len:%d Capacity:%d", nilSlice == nil, len(nilSlice), cap(nilSlice))    fmt.Printf("\nnil:%v Len:%d Capacity:%d", emptySlice0 == nil, len(emptySlice0), cap(emptySlice0))    fmt.Printf("\nnil:%v Len:%d Capacity:%d", emptySlice1 == nil, len(emptySlice1), cap(emptySlice1))}

make slice 规则

package mainimport "fmt"func main() {  s1 := make([]int, 5)  fmt.Printf("The length of s1: %d\n", len(s1))  fmt.Printf("The capacity of s1: %d\n", cap(s1))  fmt.Printf("The value of s1: %d\n", s1)  s2 := make([]int, 5, 8)  fmt.Printf("The length of s2: %d\n", len(s2))  fmt.Printf("The capacity of s2: %d\n", cap(s2))  fmt.Printf("The value of s2: %d\n", s2)}

make 初始化slice

  • 第一个参数表示长度
  • 第二个参数表示容量
  • make函数初始化切片时,如果不指明其容量,那么它就会和长度一致

links


文章来源:智云一二三科技

文章标题:golang nil slice & empty slice 笔记

文章地址:https://www.zhihuclub.com/4885.shtml

关于作者: 智云科技

热门文章

网站地图