如何理解Golang中的range语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解Golang中的range语句相关的知识,希望对你有一定的参考价值。
你把它理解为遍历么,结合for循环。
假设有一个初始化好的数组(table)或者切片(slice)的table,且table长度为10:
for i, value := range tablefmt.Printf("i=%v, value=%v\\n", i, value)
则会执行fmt.Printf10次,且这10次的【i】的值分别是从0~9,也就相当于
for i := 0; i < len(table); i++fmt.Printf("i=%v, value=%v\\n", i, table[i])
如果把上边的数组或者切片换成map
for key, value := range tablefmt.Pritnf("key=%v, value=%v\\n", key, value)
则类似上边的过程把map里边的key-value键值对一 一遍历
参考技术A 你也可以写成fori := 0; i< 5; i++
fmt.Println("Value of i is now:", i)
range是一个statement,不是函数,和for一起使用,用于遍历slice,array,map,string或者channel。
range的返回值有俩,取决于遍历那种数据结构。
唯一注意的地方是,遍历map时,元素的顺序是随机的。其实这个特性可以用做自带的随机采样。
Golang✔️走进 Go 语言✔️ 第十三课 range & map
概述
Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 13 课)
Range
Go 语言中 range 关键字用于 for 循环中迭代数组, 切片, 通道或集合的元素. 在数组和切片中 range 会返回元素的索引和索引对应当值. 在集合中返回 key-value 对的 key 值.
格式:
for index, value := range 数组/切片/通道/集合 {
循环体
}
例 1
例子:
package main
import "fmt"
func main() {
// 创建切片
var array = []int {1, 2, 3, 4}
// range使用
for index, value := range array {
fmt.Println("index:", index, "value:", value)
}
}
输出结果:
index: 0 value: 1
index: 1 value: 2
index: 2 value: 3
index: 3 value: 4
例 2
实现数组求和:
import "fmt"
func main() {
// 创建数组
var array = [5]int {1, 2, 3, 4}
// 创建变量
var sum = 0
// range使用
for _, value := range array {
sum += value
}
// 调试输出数组和
fmt.Print("数组之和: ", sum)
}
输出结果:
数组之和: 10
map
集合 (map) 是一种无序的键值对的集合. map 最重要的一点就是通过 key 来快速检索数据. key 类似于索引, 指向数据的值. map 是一种集合, 所以我们可以像迭代数组和切片那样迭代它. 不过 map 是无序的, 所以我们无法觉得它的返回顺序, 这是因为 map 是使用哈希表来实现的.
例 1
格式:
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
例子:
package main
import "fmt"
func main() {
// 定义map
var student_map = map[string]string{"学生1": "小白", "学生2": "中白", "学生3": "大白"}
// 调试输出
fmt.Println(student_map)
}
输出结果:
map[学生1:小白 学生2:中白 学生3:大白]
例 2
格式:
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
例子:
package main
import "fmt"
func main() {
// 定义map
var student_map = make(map[string]string)
// map赋值
student_map["学生1"] = "lalalallalalla"
student_map["学生1"] = "小白"
student_map["学生2"] = "中白"
student_map["学生3"] = "大白"
// 调试输出
fmt.Println(student_map)
}
输出结果:
map[学生1:小白 学生2:中白 学生3:大白]
我们可以看到 “lalalalalalal” 并没有输出, 因为 map 的 key 和值是一一对应的.
例 3
判断元素是否存在:
package main
import "fmt"
func main() {
// 创建map
var student_map = make(map[string]string)
// map赋值
student_map["学生1"] = "小白"
student_map["学生2"] = "中白"
student_map["学生3"] = "大白"
// 判断元素是否存在于map之内
student, flag := student_map["学生3"]
if flag {
fmt.Println("元素存在", student)
} else {
fmt.Println("元素不存在", student)
}
}
输出结果:
元素存在 大白
以上是关于如何理解Golang中的range语句的主要内容,如果未能解决你的问题,请参考以下文章
golang range for循环中如何正确的给goroutine传参
Golang✔️走进 Go 语言✔️ 第十三课 range & map