range 关键字概述

前言

在Go中,range关键字用于迭代数组、切片、映射、通道等数据结构,使遍历操作更加方便。

内容

遍历数组

在Go语言中,使用range关键字遍历数组是一种常见且有用的操作。以下是一个示例:

go 复制代码
package main

import "fmt"

func main() {
    // 创建一个整数数组
    numbers := [5]int{10, 20, 30, 40, 50}

    // 使用range关键字遍历数组
    fmt.Println("遍历数组:")
    for index, value := range numbers {
        fmt.Printf("索引 %d 的值是 %d\n", index, value)
    }
}

运行结果:

bash 复制代码
遍历数组:
索引 0 的值是 10
索引 1 的值是 20
索引 2 的值是 30
索引 3 的值是 40
索引 4 的值是 50

在上述示例中,我们创建了一个包含 5 个整数的数组,并使用range遍历它。range返回两个值,分别是当前元素的索引和值。

索引和值

  • index代表当前元素的索引
  • value代表当前元素的值。

你可以根据需要使用这两个值。如果选择忽视,则可以用 _ 代替。

比如:

go 复制代码
package main

import "fmt"

func main() {
	nums := []int{2, 3, 4}
	sum := 0
	for _, num := range nums {
		sum += num
	}
	fmt.Println("sum:", sum) // sum: 9
}

遍历切片

切片是Go中常用的数据结构之一,使用range关键字可以轻松遍历切片。

go 复制代码
package main

import "fmt"

func main() {
    // Create a string slice
    fruits := []string{"apple", "banana", "orange", "grape"}

    // Iterate through the slice using range
    for index, fruit := range fruits {
        fmt.Printf("Index %d: %s\n", index, fruit)
    }
}

运行结果:

bash 复制代码
Index 0: apple
Index 1: banana
Index 2: orange
Index 3: grape

在这个示例中,我们创建了一个字符串切片fruits,然后使用rangefor循环中遍历它。同样的,range关键字返回两个值:索引和切片中当前索引位置的元素值。我们将索引和水果名称打印出来,以展示遍历切片的效果。

遍历映射

映射(Map)是Go中用于存储键值对的数据结构。使用range关键字可以遍历映射中的键值对。

go 复制代码
package main

import "fmt"

func main() {
    // 创建一个映射
    grades := map[string]int{
        "Alice": 95,
        "Bob":   88,
        "Carol": 72,
    }

    // 使用range关键字遍历映射
    fmt.Println("遍历映射:")
    for name, score := range grades {
        fmt.Printf("%s 的分数是 %d\n", name, score)
    }
}

运行结果:

bash 复制代码
遍历映射:
Carol 的分数是 72
Alice 的分数是 95
Bob 的分数是 88

在上述示例中,我们创建了一个映射,将学生的名字映射到他们的分数。同样的,使用range关键字遍历映射时,range会返回两个值,分别是当前键和对应的值。name代表当前键(学生的名字),score代表当前键对应的值(分数)。

总结

可以看到,range关键字是一个强大的工具,可以用于遍历数组、切片、映射等各种数据结构,很常见也很实用,当我们能够理解和运用好用range关键字后,可以提高Go语言编程的效率和便捷性。

相关推荐
邹小邹2 小时前
Go 1.25 强势来袭:GC 速度飙升、并发测试神器上线,内存检测更精准!
后端·go
用户89535603282207 小时前
Go泛型实战:告别 interface{} 地狱,从零拆解数据流处理库
go
郭京京1 天前
go语言os.Signal接收操作系统发送的信号的通道
go
郭京京1 天前
go语言context包
go
smallyu1 天前
Go 语言 GMP 调度器的原理是什么
后端·go
ERP老兵_冷溪虎山1 天前
GoLand 卡成幻灯片?Gopher 必藏的 vmoptions 调优表(续集:WebStorm 飞升后,轮到 Go 开发神器起飞)
后端·go
江湖十年1 天前
万字长文:彻底掌握 Go 1.23 中的迭代器——原理篇
后端·面试·go
程序员爱钓鱼1 天前
Go语言实战案例-实现分页查询接口
后端·google·go
狼爷2 天前
生产环境慎用 context.Background ():你的系统可能在 “空转”
go
Code_Artist2 天前
[Go]结构体实现接口类型静态校验——引用类型和指针之间的关系
后端·面试·go