Go語言的切片

來源:互聯網
上載者:User

標籤:int   import   取數   代碼   append   copy   大小   賦值   pack   

Go 語言切片(Slice)

Go 語言切片是對數組的抽象。

Go 數組的長度不可改變,在特定情境中這樣的集合就不太適用,Go中提供了一種靈活,功能強悍的內建類型切片("動態數組"),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

定義切片

你可以聲明一個未指定大小的數組來定義切片:

var identifier []type

切片不需要說明長度。

或使用make()函數來建立切片:

var slice1  = make([] type, len)

或者寫成如下
slice1 := make([] type, len)

也可以指定容量,其中capacity為選擇性參數

slice1 := make([] type, len, capacity)

切片的執行個體

 1 package main 2  3 import ( 4     "fmt" 5 ) 6  7 func main() { 8     //初始化數組blance,元素為1,2,3,4,5,6 9     var blance = [] int{1, 2, 3, 4, 5, 6}10     //初始化數組slice1因為沒有給值,所以預設填充了3個011     var slice1 = make([] int,3 ,5)12 13     //輸出數組的初始化的值14     fmt.Println("初始化數組blance的值:", blance)15     fmt.Println("初始化數組slice1的值:", slice1)16 17     //切片的操作,可以通過索引取值18     fmt.Println("blance數組中第二個索引的值為:",blance[2])19 20     //修改blance數組中最後一個值21     blance[5] = 1000022     fmt.Println("修改blance數組最後一個值以後的結果:",blance)23 24     //使用切片給s數組賦值,從blance數組中的第0個索引取到第三個索引,但不包含第三個索引的值25     s := blance[:3]26     fmt.Println("blance數組切片擷取的數組s的值:", s)27 28 }

以上代碼執行的結果:

初始化數組blance的值: [1 2 3 4 5 6]初始化數組slice1的值: [0 0 0]blance數組中第二個索引的值為: 3修改blance數組最後一個值以後的結果: [1 2 3 4 5 10000]blance數組切片擷取的數組s的值: [1 2 3]
len() 和 cap() 函數

切片是可索引的,並且可以由 len() 方法擷取長度。

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

 1 package main 2  3 import ( 4     "fmt" 5 ) 6  7 //len可以擷取數組的總長度,cap可以擷取切片最大的長度 8 func printSlice(x [] int,name string ){ 9     fmt.Printf("len=%d cap=%d %v=%v \n", len(x), cap(x) ,name , x )10     fmt.Println("--------------------------------")11 }12 13 func main() {14     //初始化數組blance,元素為1,2,3,4,5,615     var blance = [] int{1, 2, 3, 4, 5, 6}16 17     //調用列印切片的函數18     printSlice(blance,"blance")19 20     //初始化一次數組最大長度為8個,初始化填充3個0的數組s21     s := make([] int,3 ,8)22     fmt.Println("初始化數組s的值為:", s)23 24     //調用列印切片的函數25     printSlice(s,"s")26 27 }

以上代碼執行的結果:

len=6 cap=6 blance=[1 2 3 4 5 6] --------------------------------初始化數組s的值為: [0 0 0]len=3 cap=8 s=[0 0 0] --------------------------------
append() 和 copy() 函數

如果想增加切片的容量,我們必須建立一個新的更大的切片並把原分區的內容都拷貝過來。

下面的代碼描述了從拷貝切片的 copy 方法和向切片追加新元素的 append 方法。

 1 package main 2  3 import ( 4     "fmt" 5 ) 6  7 //len可以擷取數組的總長度,cap可以擷取切片最大的長度 8 func printSlice(x [] int,name string ){ 9     fmt.Printf("len=%d cap=%d %v=%v \n", len(x), cap(x) ,name , x )10     fmt.Println("--------------------------------")11 }12 13 func main() {14     var numbers [] int15     printSlice(numbers,"numbers")16 17     //追加空切片18     numbers = append(numbers,)19     printSlice(numbers,"numbers")20 21     //追加一個元素22     numbers = append(numbers,1)23     printSlice(numbers,"numbers")24 25     //同時追加多個元素26     numbers = append(numbers,9, 9, 81)27     printSlice(numbers,"numbers")28 29     //建立n1數組是numbers的兩倍的容量30     n1 := make([] int, len(numbers), len(numbers)*2)31     printSlice(n1,"n1")32 33     //拷貝numbers數組中的內容到n1中,會在對應的索引的地方覆蓋已有的內容34     copy(n1, numbers)35     printSlice(n1,"n1")36 37     //聲明局部資料test,初始化元素兩個2,數組允許最大3個元素38     test := make([] int,2,3)39     printSlice(test,"test")40     //往test數組中添加資料,因為超過了最大長度的3個,go會維持記憶體,會另外申請一個乘以最大容量*2的容量賦值給test數組41     test = append(test,1, 2 ,3)42     printSlice(test,"test")43 }

以上代碼執行的結果:

len=0 cap=0 numbers=[] --------------------------------len=0 cap=0 numbers=[] --------------------------------len=1 cap=1 numbers=[1] --------------------------------len=4 cap=4 numbers=[1 9 9 81] --------------------------------len=4 cap=8 n1=[0 0 0 0] --------------------------------len=4 cap=8 n1=[1 9 9 81] --------------------------------len=2 cap=3 test=[0 0] --------------------------------len=5 cap=6 test=[0 0 1 2 3] --------------------------------

 

Go語言的切片

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.