最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言入門教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié)

 更新時(shí)間:2014年11月17日 09:29:02   投稿:junjie  
這篇文章主要介紹了Go語(yǔ)言入門教程之Arrays、Slices、Maps、Range操作簡(jiǎn)明總結(jié),本文直接給出操作代碼,同時(shí)對(duì)代碼加上了詳細(xì)注釋,需要的朋友可以參考下

Arrays:數(shù)組

在go語(yǔ)言中數(shù)組array是一組特定長(zhǎng)度的有序的元素集合。

復(fù)制代碼 代碼如下:

package main

import "fmt"

func main() {

    //這里我們創(chuàng)建了一個(gè)長(zhǎng)度為5的數(shù)組. 這一組數(shù)組的初值是zero-valued。整型就是0
    var a [5]int
    fmt.Println("emp:", a)

    //可以通過(guò)array[index] = value語(yǔ)法賦值
    a[4] = 100
    fmt.Println("set:", a)
    fmt.Println("get:", a[4])

    //內(nèi)置的len函數(shù)會(huì)返回?cái)?shù)組長(zhǎng)度
    fmt.Println("len:", len(a))

    //通過(guò)這個(gè)語(yǔ)法聲明數(shù)組的默認(rèn)初值
    b := [5]int{1, 2, 3, 4, 5}
    fmt.Println("dcl:", b)

    //數(shù)組類型是一維的,但是你可以通過(guò)組合創(chuàng)建多維數(shù)組結(jié)構(gòu)
    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)
}


$ go run arrays.go
emp: [0 0 0 0 0]
set: [0 0 0 0 100]
get: 100
len: 5
dcl: [1 2 3 4 5]
2d:  [[0 1 2] [1 2 3]]

Slices:切片

Slices是Go語(yǔ)言中的關(guān)鍵數(shù)據(jù)類型,它有比數(shù)組(arrays)更強(qiáng)的訪問(wèn)接口。

復(fù)制代碼 代碼如下:

package main

import "fmt"

func main() {

    //跟數(shù)組(arrays)不同,slices的類型跟所包含的元素類型一致(不是元素的數(shù)量)。使用內(nèi)置的make命令,構(gòu)建一個(gè)非零的長(zhǎng)度的空slice對(duì)象。這里我們創(chuàng)建了一個(gè)包含了3個(gè)字符的字符串 。(初始化為零值z(mì)ero-valued)
    s := make([]string, 3)
    fmt.Println("emp:", s)

    //我們可以像數(shù)組一樣進(jìn)行設(shè)置和讀取操作。
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println("set:", s)
    fmt.Println("get:", s[2])

    //獲取到的長(zhǎng)度就是當(dāng)時(shí)設(shè)置的長(zhǎng)度。
    fmt.Println("len:", len(s))

    //相對(duì)于這些基本的操作,slices支持一些更加復(fù)雜的功能。有一個(gè)就是內(nèi)置的append,可以在現(xiàn)有的slice對(duì)象上添加一個(gè)或多個(gè)值。注意要對(duì)返回的append對(duì)象重新賦值,以獲取最新的添加了元素的slice對(duì)象。
    s = append(s, "d")
    s = append(s, "e", "f")
    fmt.Println("apd:", s)

    //Slices也可以被復(fù)制。這里我們將s復(fù)制到了c,長(zhǎng)度一致。
    c := make([]string, len(s))
    copy(c, s)
    fmt.Println("cpy:", c)

    //Slices支持"slice"操作,語(yǔ)法為slice[low:high](即截取slice中的某段值)。下面這段代碼就會(huì)獲取這些字符: s[2], s[3], 和 s[4]。
    l := s[2:5]
    fmt.Println("sl1:", l)

    //從開(kāi)始截取到每5個(gè)字符(除了值)
    l = s[:5]
    fmt.Println("sl2:", l)

    //從第二個(gè)(包括)字符開(kāi)始截取到最后一個(gè)
    l = s[2:]
    fmt.Println("sl3:", l)

    //我們可以將聲明和賦值放在一行。
    t := []string{"g", "h", "i"}
    fmt.Println("dcl:", t)

    //Slices可以被組合成多維數(shù)組。里面一維的slices對(duì)象可以不等長(zhǎng),這一點(diǎn)跟多維數(shù)組不太一樣。
    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)
}

注意slices跟arrays是兩種不同的數(shù)據(jù)類型,但是他們的fmt.Println打印方式很相似。

復(fù)制代碼 代碼如下:

$ go run slices.go
emp: [  ]
set: [a b c]
get: c
len: 3
apd: [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]]

看看這篇文章,輸看看Go團(tuán)隊(duì)是如何在go中設(shè)計(jì)和實(shí)現(xiàn)slices的。

Maps:鍵值對(duì)

Maps是Go語(yǔ)言中的關(guān)聯(lián)數(shù)據(jù)類型(在其它語(yǔ)言中有時(shí)會(huì)被稱之為哈希表[hashes]或字典[dicts])

復(fù)制代碼 代碼如下:

package main

import "fmt"

func main() {

    //使用內(nèi)置的make來(lái)合建一個(gè)空的map,make(map[鍵類型]值類型)
    m := make(map[string]int)

    //設(shè)置鍵/值對(duì)使用經(jīng)典的 name[key] = val 語(yǔ)法。
    m["k1"] = 7
    m["k2"] = 13

    //打印map會(huì)輸出里面所有的鍵值對(duì)
    fmt.Println("map:", m)

    //獲取某個(gè)鍵的值
    v1 := m["k1"]
    fmt.Println("v1: ", v1)

    //len函數(shù)會(huì)獲取map中鍵/值對(duì)的個(gè)數(shù)
    fmt.Println("len:", len(m))

    //使用內(nèi)置的delete函數(shù)從map中移除鍵/值對(duì)
    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)
}

注意當(dāng)使用fmt.Println打印時(shí)map的輸出格式為map[k:v k:v]。

復(fù)制代碼 代碼如下:

$ go run maps.go
map: map[k1:7 k2:13]
v1:  7
len: 2
map: map[k1:7]
prs: false
map: map[foo:1 bar:2]

Range:范圍

range可以在多種數(shù)據(jù)結(jié)構(gòu)上進(jìn)行枚舉。讓我們看看如何在之前的數(shù)據(jù)結(jié)構(gòu)上使用。

復(fù)制代碼 代碼如下:

package main

import "fmt"

func main() {

    //這是我們使用range去求一個(gè)slice的和。使用數(shù)組跟這個(gè)很類似
    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

    //在數(shù)組上使用range將傳入index和值兩個(gè)變量。上面那個(gè)例子我們不需要使用該元素的序號(hào),所以我們使用空白符"_"省略了。有時(shí)侯我們確實(shí)需要知道它的索引。
    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

    //range也可以用在map的鍵值對(duì)上。
    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

    //range也可以用來(lái)枚舉Unicode字符串。第一個(gè)參數(shù)是字符的索引,第二個(gè)是字符(Unicode的值)本身。
    for i, c := range "go" {
        fmt.Println(i, c)
    }
}


$ go run range.go
sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111

相關(guān)文章

  • golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作

    這篇文章主要介紹了golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 一文掌握Golang的panic和recover實(shí)戰(zhàn)

    一文掌握Golang的panic和recover實(shí)戰(zhàn)

    Go語(yǔ)言中,異常處理通常依賴error返回值,本文將通過(guò)示例展示如何在Go語(yǔ)言中正確使用recover來(lái)處理panic異常,防止程序直接崩潰,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄

    源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄

    這篇文章主要為大家介紹了源碼解析gtoken替換jwt實(shí)現(xiàn)sso登錄的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享

    GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享

    這篇文章主要介紹了GO語(yǔ)言實(shí)現(xiàn)的端口掃描器分享,本文直接給出實(shí)現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
    2014-10-10
  • 詳解如何在Golang中實(shí)現(xiàn)CORS(跨域)

    詳解如何在Golang中實(shí)現(xiàn)CORS(跨域)

    很多時(shí)候,需要允許Web應(yīng)用程序在不同域之間(跨域)實(shí)現(xiàn)共享資源,本文將簡(jiǎn)介跨域、CORS的概念,以及如何在Golang中如何實(shí)現(xiàn)CORS,文中有詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-10-10
  • Gin+Gorm實(shí)現(xiàn)增刪改查的示例代碼

    Gin+Gorm實(shí)現(xiàn)增刪改查的示例代碼

    本文介紹了如何使用Gin和Gorm框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的增刪改查(CRUD)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • go語(yǔ)言執(zhí)行windows下命令行的方法

    go語(yǔ)言執(zhí)行windows下命令行的方法

    這篇文章主要介紹了go語(yǔ)言執(zhí)行windows下命令行的方法,實(shí)例分析了Go語(yǔ)言操作windows下命令行的技巧,需要的朋友可以參考下
    2015-03-03
  • golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解

    golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解

    這篇文章主要介紹了golang 并發(fā)編程之生產(chǎn)者消費(fèi)者詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • golang中defer的基本使用教程

    golang中defer的基本使用教程

    go語(yǔ)言中defer可以完成延遲功能,當(dāng)前函數(shù)執(zhí)行完成后再執(zhí)行defer的代碼塊,下面這篇文章主要給大家介紹了關(guān)于golang中defer基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Golang的引用類型和指針的使用與區(qū)別

    Golang的引用類型和指針的使用與區(qū)別

    本文詳細(xì)介紹了Golang中的引用類型和指針的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評(píng)論

交城县| 浦县| 康乐县| 康定县| 乐山市| 革吉县| 个旧市| 莎车县| 汾西县| 三穗县| 呼图壁县| 灌云县| 顺义区| 永顺县| 犍为县| 高唐县| 舞阳县| 汽车| 奇台县| 阜康市| 济阳县| 高安市| 德钦县| 牙克石市| 浮梁县| 从江县| 阿鲁科尔沁旗| 鹿邑县| 抚松县| 项城市| 永州市| 齐齐哈尔市| 当阳市| 崇左市| 大洼县| 南平市| 华容县| 丰台区| 门头沟区| 敦化市| 灌阳县|