go語言Arrays、Maps、Slices操作

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Arrays:數組

在go語言中數組array是一組特定長度的有序的元素集合,元素類型可以是任意的原始類型例如整形、字串或者自訂類型,通過索引(位置)來讀取(或者修改),索引從0開始,第一個元素索引為 0,第二個索引為 1,以此類推

array.go

package mainimport "fmt"func main() {    //這裡我們建立了一個長度為5的數組. 這一組數組的初值是zero-valued。整型就是0    var a [5]int    fmt.Println("emp:", a)    //可以通過array[index] = value文法賦值    a[4] = 100    fmt.Println("set:", a)    fmt.Println("get:", a[4])    //內建的len函數會返回數組長度    fmt.Println("len:", len(a))    //通過這個文法聲明數組的預設初值    b := [5]int{1, 2, 3, 4, 5}    fmt.Println("dcl:", b)    //數群組類型是一維的,但是你可以通過組合建立多維陣列結構    var twoD [2][3]int    for i := 0; i < 2; i++ {        for j := 0; j < 3; j++ {            twoD[i][j] = i + j        }    }    fmt.Println("2d: ", twoD)}


[root@mail work]# go run array.goemp: [0 0 0 0 0]set: [0 0 0 0 100]get: 100len: 5dcl: [1 2 3 4 5]2d:  [[0 1 2] [1 2 3]]

Maps:索引值對
Maps是Go語言中的關聯資料類型(在其它語言中有時會被稱之為雜湊表[hashes]或字典[dicts])

maps.go

package mainimport "fmt"func main() {    //使用內建的make來合建一個空的map,make(map[鍵類型]實值型別)    m := make(map[string]int)    //設定鍵/值對使用經典的 name[key] = val 文法。    m["k1"] = 7    m["k2"] = 13    //列印map會輸出裡面所有的索引值對    fmt.Println("map:", m)    //擷取某個鍵的值    v1 := m["k1"]    fmt.Println("v1: ", v1)    //len函數會擷取map中鍵/值對的個數    fmt.Println("len:", len(m))    //使用內建的delete函數從map中移除鍵/值對    delete(m, "k2")    fmt.Println("map:", m)    //可選的第二傳回值可以指出map中是否包含此鍵的值。避免空值0或""引起的歧義。    _, prs := m["k2"]    fmt.Println("prs:", prs)    //你也可以在一行中完成聲明與賦值    n := map[string]int{"foo": 1, "bar": 2}    fmt.Println("map:", n)}

[root@mail work]# go run maps.gomap: map[k1:7 k2:13]v1:  7len: 2map: map[k1:7]prs: falsemap: map[foo:1 bar:2]

Slices:切片
Slices是Go語言中的關鍵資料類型,它有比數組(arrays)更強的提供者。

slices.go

package mainimport "fmt"func main() {    //跟數組(arrays)不同,slices的類型跟所包含的元素類型一致(不是元素的數量)。使用內建的make命令,構建一個非零的長度的空slice對象。這裡我們建立了一個包含了3個字元的字串 。(初始化為零值zero-valued)    s := make([]string, 3)    fmt.Println("emp:", s)    //我們可以像數組一樣進行設定和讀取操作。    s[0] = "a"    s[1] = "b"    s[2] = "c"    fmt.Println("set:", s)    fmt.Println("get:", s[2])    //擷取到的長度就是當時設定的長度。    fmt.Println("len:", len(s))    //相對於這些基本的操作,slices支援一些更加複雜的功能。有一個就是內建的append,可以在現有的slice對象上添加一個或多個值。注意要對返回的append對象重新賦值,以擷取最新的添加了元素的slice對象。    s = append(s, "d")    s = append(s, "e", "f")    fmt.Println("apd:", s)    //Slices也可以被複製。這裡我們將s複製到了c,長度一致。    c := make([]string, len(s))    copy(c, s)    fmt.Println("cpy:", c)    //Slices支援"slice"操作,文法為slice[low:high](即截取slice中的某段值)。下面這段代碼就會擷取這些字元: s[2], s[3], 和 s[4]。    l := s[2:5]    fmt.Println("sl1:", l)    //從開始截取到每5個字元(除了值)    l = s[:5]    fmt.Println("sl2:", l)    //從第二個(包括)字元開始截取到最後一個    l = s[2:]    fmt.Println("sl3:", l)    //我們可以將聲明和賦值放在一行。    t := []string{"g", "h", "i"}    fmt.Println("dcl:", t)    //Slices可以被組合成多維陣列。裡面一維的slices對象可以不等長,這一點跟多維陣列不太一樣。    twoD := make([][]int, 3)    for i := 0; i < 3; i++ {        innerLen := i + 1        twoD[i] = make([]int, innerLen)        for j := 0; j < innerLen; j++ {            twoD[i][j] = i + j        }    }    fmt.Println("2d: ", twoD)}

[root@mail work]# go run slices.goemp: [  ]set: [a b c]get: clen: 3apd: [a b c d e f]cpy: [a b c d e f]sl1: [c d e]sl2: [a b c d e]sl3: [c d e f]dcl: [g h i]2d:  [[0] [1 2] [2 3 4]]




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.