go语言的切片研究
【摘要】 切片sliceGo 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。声明切片package mainimport "fmt"func main() { //1:direct declare variable v...
切片slice
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
声明切片
package main
import "fmt"
func main() {
//1:direct declare variable
var s1 []int
//s1 = []int{}
fmt.Printf("s1: %v,len: %v,cap: %v \n",s1,len(s1),cap(s1))
//2:assignment variable
s2 := []int{1,2,3}
fmt.Printf("s2: %v,len: %v,cap: %v \n",s2,len(s2),cap(s2))
//3:make slice
s3 :=make([]int,0)
fmt.Printf("s3 %v,len: %v,cap: %v \n",s3,len(s3),cap(s3))
//3:make slice and assignment slice length
s4 :=make([]int,0,10)
fmt.Printf("s4: %v,len: %v,cap: %v \n",s4,len(s4),cap(s4))
//4:slice by array
arr := [5]int{1,2,3,4,5}
s5 := arr[:]
fmt.Printf("s5: %v,len: %v,cap: %v \n",s5,len(s5),cap(s5))
s6 := arr[1:len(arr)-1]
fmt.Printf("s6: %v,len: %v,cap: %v \n",s6,len(s6),cap(s6))
//5:slice by slice
s7 := []int{1,2,3,4,5,6,7,8,9,10}
fmt.Printf("s7: %v,len: %v,cap: %v \n",s7,len(s7),cap(s7))
s8 := s7[1:len(arr)-1]
fmt.Printf("s8: %v,len: %v,cap: %v \n",s8,len(s8),cap(s8))
//[x:y:z] x:start index y:end index z:slice cap=z-x
s9 := s7[6:10:10]
fmt.Printf("s9: %v,len: %v,cap: %v \n",s9,len(s9),cap(s9))
}
复制
切片cap,len
cap
切片容量,在追加切片时,可能会使得切片容量变大
len
切片长度,表示切片数组的长度
package main
import "fmt"
func main() {
var s1 []int
fmt.Printf("s1: %v,len: %v,cap: %v \n",s1,len(s1),cap(s1))
s1 = []int{1,2,3}
fmt.Printf("s1: %v,len: %v,cap: %v \n",s1,len(s1),cap(s1))
var arr =[]int{1,2,3,4,5,6,7,8,9,10}
s2 := arr[0:5]
fmt.Printf("s2: %v,len: %v,cap: %v \n",s2,len(s2),cap(s2))
}
复制
输出:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)