**數(shù)組 Array**
創(chuàng)新互聯(lián)專注于羅甸企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城開(kāi)發(fā)。羅甸網(wǎng)站建設(shè)公司,為羅甸等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
數(shù)組是一種內(nèi)建的類型,是一組同類型數(shù)據(jù)的集合,是一種值類型,可以通過(guò)從0開(kāi)始的下標(biāo)索引訪問(wèn)元素值,在初始化后其長(zhǎng)度就固定了,無(wú)法修改其長(zhǎng)度,而且Array的長(zhǎng)度也是其類型的一部分,可以通過(guò)其內(nèi)置函數(shù)len(array)獲取其長(zhǎng)度,當(dāng)它作為方法的參數(shù)傳入時(shí),將復(fù)制一份數(shù)組,而不是引用同一個(gè)指針。
初始化:
[5]int{1,2,3,4,5}???#長(zhǎng)度為5的數(shù)組,其值分別為1,2,3,4,5
[5]int{1,2}???#長(zhǎng)度為5的數(shù)組,其值分別為1,2,0,0,0?在初始化時(shí),沒(méi)有指定初值的元素,int類型的默認(rèn)為0,string類型默認(rèn)為"",bool類型默認(rèn)為false
[...]int{1,2,3,4,5}?#長(zhǎng)度為5的數(shù)組,其長(zhǎng)度由初始化時(shí)元素的個(gè)數(shù)決定
[5]int{2:1,3:2,4:3}?#長(zhǎng)度為5的數(shù)組,key:value?,其值分別為0,0,1,2,3;?初始化時(shí)指定了2、3、4號(hào)索引的值分別為1,2,3
[...]int{2:1,4:3}?#長(zhǎng)度為5的數(shù)組,其值分別為0,0,1,0,3,?長(zhǎng)度為5(由元素個(gè)數(shù)決定)
賦值與使用:
package?main import?"fmt" func?test1(){ ????arr?:=?[...]int{1,2,3,4,5} ????arr[4]=arr[4]+len(arr) ????fmt.Println(len(arr)) ????fmt.Println(arr) } func?test2(){ ????arr2?:=?[...]int{2:3,3:1,4:0} ????for?index,?value?:=?range?arr2?{ ????????fmt.Printf("arr2[%d]?=?%d\n",index,value) ????} ????fmt.Println("-------------") ????for?index?:=?0;indexarray 是值類型,將一個(gè)數(shù)組復(fù)制給另一個(gè)數(shù)組時(shí),實(shí)際上是重新復(fù)制了一份元素集合。
func?test3(){ ????arr3?:=?[5]int{2,3} ????arr5?:=?arr3 ????arr3[3]=9 ????arr5[0]=1 ????fmt.Printf("arr3=%d\n?arr5=%d\n?arr5[0]==arr3[0]=%t",arr3,arr5,arr5[0]==arr3[0]) } func?main(){ ????//?test1() ????//?test2() ????test3() }**切片 Slices**
數(shù)組的長(zhǎng)度是不可變的,那么在特定的場(chǎng)景中這樣的集合就不適合了,于是golang提供了一種功能強(qiáng)悍的內(nèi)置類型slices,相比于數(shù)組array,切片slices的長(zhǎng)度是不固定的,可以追加元素,追加元素的時(shí)候可能是切片的容量增大。切片slices有兩個(gè)概念:一個(gè)是長(zhǎng)度len,一個(gè)是容量cap。
初始化
切片可以通過(guò)數(shù)組來(lái)初始化,也可以通過(guò)內(nèi)置函數(shù)make()初始化,初始化時(shí)len=cap,在追加元素時(shí),當(dāng)容量不足時(shí),cap將按照l(shuí)en的2倍擴(kuò)容。
s?:=?[]int{1,2,3}???#直接初始化切片,切片的初始值為1,2,3;len=cap=3s?:=?arr[:]??#初始化切片s,是數(shù)組arr的引用s?:=?arr[startIndex:endIndex]??#將arr中從下標(biāo)startIndex到endIndex-1?下的元素創(chuàng)建為一個(gè)新的切片s?:=?arr[startIndex:]???#缺省endIndex時(shí)將表示一直到arr的最后一個(gè)元素s?:=?arr[:endIndex]???#缺省startIndex時(shí)將表示從arr的第一個(gè)元素開(kāi)始s1?:=?s[startIndex:endIndex]?#通過(guò)切片s,來(lái)初始化切片s1s?:=make([]int,len,cap)????#通過(guò)內(nèi)置函數(shù)make()初始化切片s,[]int?標(biāo)識(shí)為其元素類型為int的切片賦值與引用
package?main import?"fmt" func?main(){ ????s0?:=?[]int{1,2,3,4,5} ????s1?:=?s0[1:] ????fmt.Println("s1=",s1) ????s0[1]=1 ????fmt.Println(s1) ????arr?:=?[...]int{1,2,3,4,6} ????s2:=arr[:] ????fmt.Printf("arr=%d,?s2=%d\n",arr,s2) ????arr[3]=3 ????fmt.Printf("arr=%d,s2=%d\n",arr,s2) ????fmt.Println("s0=",s0,"s2=",s2,"arr=",arr) ????s2?=?append(s2,?s0...) ????s2?=?append(s2,?arr[:]...)?//追加數(shù)組元素 ????fmt.Println("s2=",?s2) ????s3?:=?append(s1,?7,?9,?11) ????fmt.Println("s3=",?s3) }output
s1=?[2?3?4?5] [1?3?4?5] arr=[1?2?3?4?6],?s2=[1?2?3?4?6] arr=[1?2?3?3?6],s2=[1?2?3?3?6] s0=?[1?1?3?4?5]?s2=?[1?2?3?3?6]?arr=?[1?2?3?3?6] s2=?[1?2?3?3?6?1?1?3?4?5?1?2?3?3?6] s3=?[1?3?4?5?7?9?11]
新聞標(biāo)題:golang碎片整理之?dāng)?shù)組與切片
標(biāo)題來(lái)源:http://weahome.cn/article/gjssgs.html