陣列是內建(build-in)型別,是一組同型別資料的集合,它是值型別,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的引數傳入時將複製乙份陣列而不是引用同一指標。陣列的長度也是其型別的一部分,通過內建函式len(array)獲取其長度。
注意:和c中的陣列相比,存在一些不同:
1)陣列是值,將乙個陣列賦值給另乙個陣列,會拷貝所有的元素
2)陣列作為函式引數,收到的是陣列的乙個拷貝,而不是它的指標
3)陣列的大小是型別的一部分,[10]int和[20]int是不一樣的
陣列的初始化:
//方法一
arr1:=[4
]int
//方法二
arr2:=
[...
]int
陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別slices切片(「動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。切片中有兩個概念:一是len長度,二是cap容量,長度是指已經被賦過值的最大下標+1,可通過內建函式len()獲得。容量是指切片目前可容納的最多元素個數,可通過內建函式cap()獲得。切片是引用型別,因此在當傳遞切片時將引用同一指標,修改值將會影響其他的物件。
切片初始化:
//方法一
slice:=
int//方法二
slice:=
make([
]int
,len
,cap
)//方法三(又陣列建立)
arr:=
[...
]int
//陣列
slice:=arr[0:
2]//切片
slice是引用型別,所以當引用改變其中元素的值時,其它的所有引用都會改變該值,例如下面的a和b,如果修改了b中元素的值,那麼a相對應的值也會改變。
package main
import
"fmt"
func
main()
b:=a
b[0]=
100 fmt.
println
("切片"
,a[0])
a1:=
[...
]int
b1:=a1
b1[0]
=100
fmt.
println
("陣列"
,a1[0]
)}
同樣是引用型別的除了切片以外,還包括:chan、map、inte***ce Golang中陣列和切片的區別
一句話總結 切片的底層是陣列,可以理解為切片是動態陣列,注意兩者初始化和函式引數的區別。陣列需要指定大小,不指定也會根據初始化的自動推算出大小,不可改變 陣列 a int 或 var a int a 3 int 或 var a 3 int 切片 a int 或 var a int a make in...
golang 陣列和切片
陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...
golang中陣列和切片的區別與聯絡
golang中陣列和切片的區別 切片時指標型別,陣列是值型別 陣列的長度是固定的,而切片不是 切片是動態的陣列 切片比陣列多乙個屬性 容量 cap 切片的底層是陣列 既然乙個是指標型別,乙個是值型別,那麼區別體現在 呢?看下這個例子 numbers int for i,e range numbers...