溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Go語言的切片

發(fā)布時(shí)間:2021-10-08 13:52:21 來源:億速云 閱讀:115 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“如何理解Go語言的切片”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何理解Go語言的切片”吧!

目錄
  • 一、定義切片

    • 1、聲明一個(gè)未指定大小的數(shù)組來定義切片

    • 2、使用make()函數(shù)來創(chuàng)建切片

  • 二、切片是可索引的

    • 1、len() 和 cap() 函數(shù)

  • 三、切片截取

    • 四、增加切片的容量

      說明:

      Go 語言切片是對(duì)數(shù)組的抽象。

      Go 數(shù)組的長度不可改變,在特定場(chǎng)景中這樣的集合就不太適用,Go中提供了一種靈活,功能強(qiáng)悍的內(nèi)置類型切片("動(dòng)態(tài)數(shù)組"),與數(shù)組相比切片的長度是不固定的,可以追加元素,在追加時(shí)可能使切片的容量增大。

      一、定義切片

      注意:切片不需要說明長度

      1、聲明一個(gè)未指定大小的數(shù)組來定義切片

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

      2、使用make()函數(shù)來創(chuàng)建切片

      var slice1 []type = make([]type, len)
      //也可以簡寫為
      slice1 := make([]type, len)
      //例如
      slice := make([]type, len)

      二、切片是可索引的

      1、len() 和 cap() 函數(shù)

      可以由 len() 方法獲取長度。

      切片提供了計(jì)算容量的方法 cap() 可以測(cè)量切片最長可以達(dá)到多少

      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)切片

      一個(gè)切片在未初始化之前默認(rèn)為 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=[]

      三、切片截取

      可以通過設(shè)置下限及上限來設(shè)置截取切片 [lower-bound:upper-bound]

      package main
      
      import "fmt"
      
      func main() {
          //創(chuàng)建切片
          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])
      
          //打印子切片默認(rèn)下限
          fmt.Println("number == ", number[:3])
      
          //打印子切片默認(rèn)上限
          fmt.Println("number == ", number[4:])
      
      }
      
      func printSlice(x []int) {
          fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
      }

      結(jié)果:

      如何理解Go語言的切片

      四、增加切片的容量

      原理:創(chuàng)建一個(gè)新的更大的切片并把原分片的內(nèi)容都拷貝過來

      append() 和 copy() 函數(shù)
      package main
      
      import (
          "fmt"
      )
      
      func main() {
          //創(chuàng)建切片
          var number []int
          printSlice(number)
      
          //允許追加空切片
          number = append(number,0)
          printSlice(number)
      
          //向切片添加一個(gè)元素
          number = append(number,1)
          printSlice(number)
      
          //同時(shí)添加多個(gè)元素
          number = append(number,2,3,4)
          printSlice(number)
      
          //創(chuàng)建的新的切片是之前的切片容量的兩倍
          number1 := make([]int,len(number),(cap(number))*2)
      
          //拷貝number的內(nèi)容到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語言的切片”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)如何理解Go語言的切片這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

      向AI問一下細(xì)節(jié)

      免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

      go
      AI