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

全部開發(fā)者教程

Go 入門教程

Go 語言中的 range

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

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

1. 基本用法

range 可以用來遍歷的對(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": "蘋果", "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é)果:

圖片描述

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

代碼示例:

package main

import (
    "fmt"
)

func main() {

    m := map[string]string{"Apple": "蘋果", "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í)候需要注意,我們無法通過range輸出的值來修改遍歷的對(duì)象,因?yàn)閞ange相當(dāng)于聲明了兩個(gè)變量,這兩個(gè)變量逐一復(fù)制了遍歷對(duì)象中的值,歸根結(jié)底還是因?yàn)?Go 語言只有值傳遞,沒有引用傳遞。

代碼示例:

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 語言中 range 關(guān)鍵字的用法,Go語言中可以 range 的對(duì)象有:字符串、數(shù)組、切片、map 和通道。其中用于接收 range 出來的值的變量是一個(gè)/兩個(gè)不斷被賦值的變量,所以這些變量的修改無法影響到正在被遍歷的對(duì)象本身。