go
的陣列和其它語言基本上一樣,是長度固定的特定型別元素組成的序列,這基本上是所有語言陣列的特性。和其它語言相比差異主要在宣告和初始化的寫法上,下面是簡單宣告乙個陣列:
var a [5]int
fmt.println(a[0])
fmt.println(fmt.println(a[len(a)-1]))
上面的a
是乙個長度為5
的整數陣列,如果沒有給定初始值它裡面的元素預設值是0
。go
陣列的下標是從0開始的,len
函式返回陣列中元素的個數。我們可以在宣告陣列的時候初始化它的值:
var m [3]int = [3]int
var n [3]int = [3]int
這裡的m
和n
都是長度為3
的陣列,m
對應的值是1, 2, 3
而由於n
初始化的時候只有2
個值,因此它裡面的值是2, 3, 0
。
如果採用簡單宣告:=
的方式宣告乙個陣列,可以指定陣列的大小,也可以不指定大小這時它會根據初始化值的個數來確定:
a := [10]int{} //元素都為0
b := [...]int //長度為2
go
也可以直接指定乙個索引和值,來初始化,如果宣告的時候長度不指定,那最大的索引加1
就是陣列的長度:
a := [10]int // 長度10,a[1] = 2 其它為0
b := [...]int //長度11,a[1] = 2 a[10] = 1其它為0
陣列a
長度宣告是10
,只給了索引1
的值為2
,其餘都為0
。陣列b
宣告的時候索引1
為2
,10
為1
,它的長度是11
修改陣列中某個索引的值方式和其它語言一樣:
a := [10]int{}
a[0] = 10
陣列的型別是由元素的型別和長度共同決定的,[3]int
和[4]int
是兩種不同的陣列型別。因此:
a := [3]int
a = [4]int
編譯的時候會報錯,而:
a := [3]int
a = [3]int
是正確的
上面說的陣列長度是固定,使用的時候不是很靈活,slice
的長度是可變,簡單宣告乙個未初始化的slice
var a int
print(len(a))
print(cap(a))
slice
也可以利用len
返回它的長度,剛才宣告的slice
長度為0
。除了長度slice
還有乙個容量cap
的概念,用cap
可以返回它的容量。長度不能超過它的容量。slice的宣告也可以用make
,用make
宣告可以指定容量和可以不指定容量,這時容量和長度一致:
a := make(int, 10) //長度為10,容量為10
a := make(int, 10, 12) //長度為10 容量為12
slice
可以進行切片操作slice[i:j]
,建立乙個新的slice
,新的slice
範圍是原來slice
下標i
到j-1
,也可以不指定下標slice[:j]
則是預設從0
到j-1
,同理如果slice[i:]
就是從i
到最後乙個元素,下面是乙個簡單的例子:
a := int
b = a[1:2]
c = a[:2]
d = a[1:]
需要注意的是切片操作slice[i:j]
,j
可以大於slice
的長度,只要它小於容量
package main
func main()
Go的100天之旅 01初識Go
上個世紀70年代ken thompson和dennis m.ritchie合作發明了unix作業系統同時dennis m.ritchie發明了c語言。2007年的robert griesemer,rob pike和ken。thompson三位大牛在google公司開始編寫和設計go語言。2009年g...
Go的100天之旅 03變數
變數這個詞 於數學,類似方程中的x y,代表的是儲存在計算機中的值。這裡主要介紹go和其它程式語言不一樣的地方,在前面我們提到過,go是一門靜態語言。靜態語言區別動態語言乙個重要的特性就是變數的型別不可變,一般是在宣告的時候就指定型別,之後就不可修改它的型別,而動態語言可以隨時修改變數的型別。go的...
Go的100天之旅 02基本語法
下面是go的25個關鍵字 break default func inte ce select case defer gomap struct chan else goto package switch const fallthrough ifrange type continue forimport...