赞
踩
一、切片声明&初始化
结构:
//切片声明
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)
例子:
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)
是不是很懵?不过可以慢慢梳理。
(一)slice(切片)只有一种声明方式,与数组类似,但不指明大小
(二)slice(切片)一共有三种初始化方式
切片作为初始化值
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)
输出:
len=0 cap=0 slice=[]
数组作为初始化值
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)
输出:
len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
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)
输出:
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]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。