您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何理解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í)可能使切片的容量增大。
注意:切片不需要說明長度
var identifier []type //例如 var slice []int
var slice1 []type = make([]type, len) //也可以簡寫為 slice1 := make([]type, len) //例如 slice := make([]type, len)
可以由 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é)果:
原理:創(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)注!
免責(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)容。