陣列作為語言中必不可少的乙個存在,自然要關注,而slice(切片)是go語言對陣列的抽象。
在go中,我們這樣宣告乙個陣列:
var arr [10]int
賦值:arr[0]=1
陣列大小是型別的一部分。由於不同的大小是不同的型別,因此不能改變大小
陣列同樣是值型別的:將乙個陣列賦值給另乙個陣列,會複製所有的元素。尤其是當向函式內傳遞乙個陣列的時候,它會獲得乙個陣列的副本,而不是陣列的指標。
當然,作為語法超讚的go,當然還有更簡潔的陣列宣告,和賦值語句,比如:
a :=[2]int
不確定陣列長度的情況下可以:
a :=[...]int
, go會自動計數。(注意三點...是不能省略的)。
slice 與 array 接近,但是在新的元素加入的時候可以增加長度。
slice 總是指向底層的
乙個 array。
slice 是乙個指向 array 的指標,這是其與 array 不同的地方;slice 是引用
型別,這意味著當賦值某個 slice 到另外乙個變數,兩個引用會指向同乙個 array。
slice宣告語法:
var slice1 type = make(type, len)
也可以簡寫為
slice1 := make(type, len)
例項展示:
// array[n:m] 從 array 建立了乙個 slice,具有元素 n 到 m-1
a := [...]i n t .0
s1 := a[2:4] .1
s2 := a[1:5] .2
s3 := a[:] .3
s4 := a[:4] .4
s5 := s2[:] .5
.0 定義乙個 5 個元素的 array,序號從 0 到 4;
.1 從序號 2 至 3 建立 slice,它包含元素 3, 4;
.2 從序號 1 至 4 建立,它包含元素 2, 3, 4, 5;
.3 用 array 中的所有元素建立 slice,這是 a[0:len(a)] 的簡化寫法;
.4 從序號 0 至 3 建立,這是 a[0:4] 的簡化寫法,得到 1, 2, 3, 4;
.5 從 slice s2 建立 slice,注意 s5 仍然指向 array a。
在 go 中有 map 型別。map 可以認為是乙個用字串做索引的數
組(在其最簡單的形式下).
map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。
map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的。
比如,time:= map[string]int
也可以用,make(參照內建函式)的形式:
time := make(map[string]int)
fmt.printf("%d", time["year"])
或者
v, ok := monthdays["jan"]
Go語言中的 Array, Slice和 Map
曾經學習python的時候,記得書上說 dict 是python的 horsepower 動力 然後,slice 和 map 又何嘗不是golang的 workhorse 呢?陣列的宣告 這裡就是定義,給資料儲存分配了空間 var arrayname arraysize datatype 如果陣列定...
Go 陣列 和 切片(array slice)
與其他大多數語言類似,go語言的陣列也是乙個元素型別相同的定長的序列。陣列有 3 種建立方式 1 length type 2 length type 3 type 如下 func test5 arr3 5 int32 arr4 5 int32 arr5 int32 arr6 4 4 int32,fm...
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...