温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解Go语言的切片

发布时间:2021-10-08 13:52:21 来源:亿速云 阅读:116 作者:iii 栏目:开发技术

这篇文章主要讲解了“如何理解Go语言的切片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Go语言的切片”吧!

目录
  • 一、定义切片

    • 1、声明一个未指定大小的数组来定义切片

    • 2、使用make()函数来创建切片

  • 二、切片是可索引的

    • 1、len() 和 cap() 函数

  • 三、切片截取

    • 四、增加切片的容量

      说明:

      Go 语言切片是对数组的抽象。

      Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

      一、定义切片

      注意:切片不需要说明长度

      1、声明一个未指定大小的数组来定义切片

      var identifier []type
      //例如
      var slice []int

      2、使用make()函数来创建切片

      var slice1 []type = make([]type, len)
      //也可以简写为
      slice1 := make([]type, len)
      //例如
      slice := make([]type, len)

      二、切片是可索引的

      1、len() 和 cap() 函数

      可以由 len() 方法获取长度。

      切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少

      package main
      
      import "fmt"
      
      func main(){
          var number = make([]int,3,5)
          fmt.Printf("len=%d cap=%d         slice=%v\n",len(number),cap(number),number)
      }
      
      //len=3 cap=5 slice=[0 0 0]

      2、空(nil)切片

      一个切片在未初始化之前默认为 nil,长度为 0

      package main
      
      import "fmt"
      
      func main(){
          var number []int
          fmt.Printf("len=%d cap=%d slice=%v\n",len(number),cap(number),number)
      }
      
      //len=0 cap=0 slice=[]

      三、切片截取

      可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound]

      package main
      
      import "fmt"
      
      func main() {
          //创建切片
          number := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
          printSlice(number)
      
          //打印原始切片
          fmt.Println("number == ", number)
      
          //打印子切片从索引1到索引4
          fmt.Println("number == ", number[1:4])
      
          //打印子切片默认下限
          fmt.Println("number == ", number[:3])
      
          //打印子切片默认上限
          fmt.Println("number == ", number[4:])
      
      }
      
      func printSlice(x []int) {
          fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
      }

      结果:

      如何理解Go语言的切片

      四、增加切片的容量

      原理:创建一个新的更大的切片并把原分片的内容都拷贝过来

      append() 和 copy() 函数
      package main
      
      import (
          "fmt"
      )
      
      func main() {
          //创建切片
          var number []int
          printSlice(number)
      
          //允许追加空切片
          number = append(number,0)
          printSlice(number)
      
          //向切片添加一个元素
          number = append(number,1)
          printSlice(number)
      
          //同时添加多个元素
          number = append(number,2,3,4)
          printSlice(number)
      
          //创建的新的切片是之前的切片容量的两倍
          number1 := make([]int,len(number),(cap(number))*2)
      
          //拷贝number的内容到number1中
          copy(number1,number)
          printSlice(number1)
      }
      
      func printSlice(x []int) {
          fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
      }

      感谢各位的阅读,以上就是“如何理解Go语言的切片”的内容了,经过本文的学习后,相信大家对如何理解Go语言的切片这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

      向AI问一下细节

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      go
      AI