go語言的array slice 和 map

2021-10-01 05:20:44 字數 1645 閱讀 8404

陣列作為語言中必不可少的乙個存在,自然要關注,而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這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...