GO語言中的切片

2021-10-03 23:07:29 字數 1412 閱讀 7257

宣告乙個切片int型的切片

var s int

初始化乙個長度為len,容量為cap的切片

s = make(int,len,cap) cap可以省略,省略後cap等於len

也可以簡潔的初始化

s:=make(int ,len,cap)

還可以指定值的建立切片

s:=int

指定索引值式的建立

s:=int 索引下標為3的值為5

陣列是值型別,切片和陣列不一樣,切片是引用型別,如果不想改變原來的切片進行操作,可以使用copy(新切片,原切片)複製乙份。切片在底層是陣列,包含三部分,ptr為指向開始的元素,len為切片的長度,cap為切片的容量。s[1:4]會得到索引為1,2,3的值,腳標是前包括,後不包括。切片可以向後擴充套件,不可以向前擴充套件,s[i]不可以超越len(s),向後擴充套件不可以超越底層陣列cap(s)。

例子1:

func update(s int,val int)  

func main()

s1:=total[:]

fmt.println("change before")

fmt.println(s1)

update(s1,100)

fmt.println("change after")

fmt.println(s1)

}

以上會輸出

change before

[0 1 2 3 4 5 6 7]

change after

[100 1 2 3 4 5 6 7]

例子2:以下會輸出什麼?

func main()

var s1 int

s1=total[2:6]

fmt.printf("s1 len=%d,cap=%d\n",len(s1),cap(s1))

s2:=s1[2:5]

fmt.printf("s2 len=%d,cap=%d\n",len(s2),cap(s2))

fmt.println(total)

fmt.println(s1)

fmt.println(s2)

}

輸出以下內容

s1 len=4,cap=6

s2 len=3,cap=4

[0 1 2 3 4 5 6 7]

[2 3 4 5]

[4 5 6]

畫圖看一下

這個就涉及到切片的向後擴充套件, s2的末索引超過s1的末索引時而不會報錯。s1和s2都指向底層的total陣列。

Go語言中Slice(切片)初探

最近上課學習go語言,看go語言指南,裡面說 乙個 slice 會指向乙個序列的值,並且包含了長度資訊,為了指定容量,可傳遞第三個引數到 make。感覺有些懵比,指向乙個序列的值?指定容量?我就在go指南上互動的地方做了點嘗試。本人蒟蒻,如有錯誤,希望大佬指出的時候不要激動。乙個slice 切片 是...

go語言中陣列與切片的區別

一句話總結 切片是動態陣列,注意兩者初始化和函式引數的區別 1 初始化 陣列需要指定大小,不指定也會根據初始化的自動推算出大小,不可改變 陣列 a int a 3 int 切片 a int a make int,5 a make int,5,10 var a int int errora intva...

Go語言切片

go語言切片 go語言切片是對陣列的抽象 go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。宣告乙個未指定大小的陣列來定義切片 var identifier ...