go语言的切片研究

举报
仙士可 发表于 2023/06/26 17:18:55 2023/06/26
【摘要】 切片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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。