当前位置:   article > 正文

【Go】初始Go切片(Slice)(一)_go 切片初始化

go 切片初始化

【Go】初识Go切片(Slice)(一)

一、切片声明&初始化

结构:

//切片声明
var sliceName []sliceType
//切片初始化
var sliceName []sliceType = []sliceType{}
var sliceName []sliceType = array[startIndex:endIndex]
var sliceName []sliceType = make([]sliceType, length, capacity_optional)
sliceName := []sliceType{}
sliceName := array[startIndex:endIndex]
sliceName := make([]sliceType, length, capacity_optional)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

例子:

array := [...]int {0,1,2,3,4,5,6,7,8}
//声明方式
var slice []int
//初始化方式一:切片作为初始化值
var slice2 []int = []int{}
//初始化方式二:数组作为初始化值
var slice3 []int = array[0:9]
//初始化方式三:make函数返回值作为初始化值
var slice4 []int = make([]int , 5, 10)
slice5 := []int{1,2,3 }
slice6 := array[2:5]
slice7 := make([]int, 5, 10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

是不是很懵?不过可以慢慢梳理。

(一)slice(切片)只有一种声明方式,与数组类似,但不指明大小

(二)slice(切片)一共有三种初始化方式

  1. 切片作为初始化值

    var slice2 []int = []int{}

    切片定义是对数组的抽象,在例子中([]int{})可以简单看做是不用声明长度的数组。

    数组和切片都有指向数组的指针。而切片比数组多了len和cap。len表示切片的长度,cap表示切片的容量。len与cap在未被定义时会被自动赋值:len为初始化值的长度,cap为len。

    这里利用自定义PrintSlice函数输出切片的属性

    func PrintSlice(x []int){
        fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
    }
    
    PrintSlice(slice2)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出:

    len=0 cap=0 slice=[]


  2. 数组作为初始化值

    array := […]int {0,1,2,3,4,5,6,7,8}

    var slice3 []int = array[0:9]

    (1)这里是将数组下标 0 到 8 的元素放在切片中。

    startIndex的缺省值为0,endIndex的缺省值为array的长度。

    (2)初始化后,切片的len为 endIndex - startIndex,cap为 array长度 - startIndex。

    切片中,cap(容量)是永远大于等于len(长度)的。cap就类似容器,len类似容器中的水,水不会比容器还高,对吧?

    这里利用自定义PrintSlice函数输出切片的属性

    func PrintSlice(x []int){
        fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
    }
    
    PrintSlice(slice3)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出:

    len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]


  3. make函数返回值作为初始化值

    var slice4 []int = make([]int , 5, 10)

    make方法直接定义了切片的类型、长度和容量。其中容量可选,缺省值为定义的长度。

    这里利用自定义PrintSlice函数输出切片的属性

    func PrintSlice(x []int){
        fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
    }
    
    PrintSlice(slice4)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出:

    len=5 cap=10 slice=[0 0 0 0 0]

go语言中,只要记住一点就可以分辨切片和数组

切片声明时,不会在[]内规定大小,而数组必须规定

看例:

//数组
var array [5]int
var array [5]int = [5]int{1,2,3 }
array := [5]int {1,2,3}
array := [...]int {1,2,3}
//切片
var slice []int
var slice []int = []int{1,2,3}
var slice []int = make([]int, 5, 10)
slice := []int{1,2,3}
slice := make([]int, 5, 10)
slice := array[0:5]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/206373?site
推荐阅读
相关标签
  

闽ICP备14008679号