第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Go 入門(mén)教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類(lèi)型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類(lèi)型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類(lèi)型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類(lèi)型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴(lài)管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

Go 語(yǔ)言中的 range

在線程不安全的 map 中我們學(xué)習(xí)了 map 的遍歷,里面使用了一個(gè)叫 range 的關(guān)鍵字來(lái)對(duì) map 進(jìn)行遍歷操作。當(dāng)時(shí)還提到了切片和數(shù)組都可以使用這個(gè)方法遍歷。本文就來(lái)詳細(xì)學(xué)習(xí)一下 range 關(guān)鍵字的用法。

Tips:本文提及的 map 均是線程不安全的 map。線程安全的 map 及其遍歷方法參照 Go 語(yǔ)言中的map 一文。

1. 基本用法

range 可以用來(lái)遍歷的對(duì)象有數(shù)組、切片、map、字符串以及通道。遍歷的對(duì)象不同,range 的返回值也會(huì)有所不同。遍歷數(shù)組、切片和字符串時(shí),它返回的就是數(shù)據(jù)的索引和值。遍歷map時(shí)返回的就是map的key和value。而遍歷通道時(shí)則只返回通道中的數(shù)據(jù)。

代碼示例:

package main

import (
    "fmt"
)

func main() {
    str := "Codey"
    intArray := [5]int{1, 2, 3, 4, 5}
    intSlice := []int{1, 2, 3, 4, 5}
    m := map[string]string{"Apple": "蘋(píng)果", "Orange": "橘子", "Banana": "香蕉"}
    c := make(chan int, 10)
    c <- 10
    c <- 11
    c <- 12
    c <- 13
    c <- 14
    fmt.Println("---字符串的遍歷---")
    //遍歷字符串
    for k, v := range str {
        fmt.Printf("索引:%d,值:%c\n", k, v)
    }
    fmt.Println("---數(shù)組的遍歷---")
    //遍歷數(shù)組
    for k, v := range intArray {
        fmt.Printf("索引:%d,值:%d\n", k, v)
    }
    fmt.Println("---切片的遍歷---")
    //遍歷切片
    for k, v := range intSlice {
        fmt.Printf("索引:%d,值:%d\n", k, v)
    }
    fmt.Println("---map的遍歷---")
    //遍歷map
    for k, v := range m {
        fmt.Printf("key:%s,value:%s\n", k, v)
    }
    fmt.Println("---通道的遍歷---")
    //遍歷通道
    for v := range c {
        fmt.Printf("值:%d\n", v)
        if len(c) == 0 {
            break
        }
    }
}

執(zhí)行結(jié)果:

圖片描述

若是在開(kāi)發(fā)過(guò)程中只想用到遍歷對(duì)象的索引或者值,比如說(shuō)一個(gè)map以汽車(chē)的車(chē)牌號(hào)為key存儲(chǔ)了一些汽車(chē)的信息,但是你只想要操作車(chē)牌號(hào)??梢允褂?code>_來(lái)接收不需要使用的值。如果是只想用索引的話,可以直接只用一個(gè)參數(shù)接收遍歷對(duì)象傳出的值,默認(rèn)只會(huì)接收索引。

代碼示例:

package main

import (
    "fmt"
)

func main() {

    m := map[string]string{"Apple": "蘋(píng)果", "Orange": "橘子", "Banana": "香蕉"}
    fmt.Println("---map的key值---")
    //只取key
    for k := range m {
        fmt.Printf("key:%s\n", k)
    }
    fmt.Println("---map的value值---")
    //只取value
    for _, v := range m {
        fmt.Printf("value:%s\n", v)
    }
}

執(zhí)行結(jié)果:

圖片描述

2. 注意事項(xiàng)

在使用 range 的時(shí)候需要注意,我們無(wú)法通過(guò)range輸出的值來(lái)修改遍歷的對(duì)象,因?yàn)閞ange相當(dāng)于聲明了兩個(gè)變量,這兩個(gè)變量逐一復(fù)制了遍歷對(duì)象中的值,歸根結(jié)底還是因?yàn)?Go 語(yǔ)言只有值傳遞,沒(méi)有引用傳遞。

代碼示例:

package main

import (
    "fmt"
)

func main() {

    intSlice := []int{1, 2, 3, 4, 5}

    //遍歷切片
    for k, v := range intSlice {
        fmt.Printf("索引:%d,索引地址:%p\n", k, &k)
        fmt.Printf("值:%d,值地址:%p\n", v, &v)
    }
}

執(zhí)行結(jié)果:

圖片描述

3. 小結(jié)

本文主要介紹了 Go 語(yǔ)言中 range 關(guān)鍵字的用法,Go語(yǔ)言中可以 range 的對(duì)象有:字符串、數(shù)組、切片、map 和通道。其中用于接收 range 出來(lái)的值的變量是一個(gè)/兩個(gè)不斷被賦值的變量,所以這些變量的修改無(wú)法影響到正在被遍歷的對(duì)象本身。