(二)golang陣列和切片

2021-09-14 04:41:23 字數 1468 閱讀 7370

golang中的陣列是一種由固定長度和固定物件型別所組成的資料型別。例如下面:

var a [4]int
a是乙個擁有4個int型別元素的陣列。當a一旦被宣告之後,元素個數就被固定了下來,在a這個變數的生命週期之內,元素個數不會發生變化。而此時a的型別就是[4]int,如果同時存在乙個b變數,為[5]int。即便兩個變數僅僅相差乙個元素,那麼在記憶體中也佔據著完全不同的位址分配單元,a和b就是兩個完全不同的資料型別。在golang中,陣列一旦被定義了,那麼其內部的元素就完成了初始化。也就是時候a[0]等於0。

在golang當中,乙個陣列就是乙個資料實體物件。在golang當使用a時,就代表再使用a這個陣列。而在c中,當使用a時,則代表著這個陣列第乙個元素的指標。

letters := string
陣列宣告時候方括號內需要寫明陣列的長度或者使用(...)符號自動計算長度,切片不需要指定陣列的長度。比較規範的宣告方式是使用make,大致有兩種方式

1、只指定長度,這個時候切片長度和容量相同;

2、同時指定切片的長度和容量。

var s1 = make(byte, 5)

var s2 = make(byte, 5, 10)

由於切片是 引用型別 ,因此當引用改變其中元素的值時候,其他的所有引用都會改變該值。例如

var a = int

s1 := a[:4]

s2 := a[3:7]

fmt.println(s1)

fmt.println(s2)

s1[3] = 100

fmt.println(s1)

fmt.println(s2)

結果是:

[1 2 3 4]

[4 5 6 7]

[1 2 3 100]

[100 5 6 7]

從概念上看,切片像是乙個結構體,包含了三個元素:

1、乙個指向陣列中切片指定的開始位置;

2、長度,即切片的長度,通過內建函式len獲得;

3、最大長度,即切片的最大容量,通過內建函式cap獲得。

如果len比cap還大,那麼就會觸發執行時異常。

golang提供copy用於將內容從乙個陣列切片複製到另乙個陣列切片。如果加入的兩個陣列切片不一樣大,就會按其中較小的那個陣列切片的元素個數進行複製。

slice1 := int 

slice2 := int

copy(slice2, slice1) // 只會複製slice1的前3個元素到slice2中

copy(slice1, slice2) // 只會複製slice2的3個元素到slice1的前3個位置

golang 陣列和切片

陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...

golang陣列,切片

陣列 同一種資料型別的固定長度序列 陣列的定義 var a len int 比如 var a 5 int 長度是陣列型別的一部分,因此,var a 5 int 和 var a 10 int 是不同的型別 陣列的初始化 func chushi var age1 5 int var age2 int v...

golang 陣列和切片的區別

陣列是內建 build in 型別,是一組同型別資料的集合,它是值型別,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的引數傳入時將複製乙份陣列而不是引用同一指標。陣列的長度也是其型別的一部分,通過內建函式len array 獲取其長度。注意 和c中的陣列相比,...