Go 语言范围(Range)

简介: Go 语言范围(Range)

Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {

   newMap[key] = value

}

以上代码中的 key 和 value 是可以省略。

如果只想读取 key,格式如下:

for key := range oldMap

或者这样:

for key, _ := range oldMap

如果只想读取 value,格式如下:

for _, value := range oldMap

实例

遍历简单的数组,2**%d 的结果为 2 对应的次方数:

实例

package main


import "fmt"


var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}


func main() {

  for i, v := range pow {

     fmt.Printf("2**%d = %d\n", i, v)

  }

}

以上实例运行输出结果为:

2**0 = 1

2**1 = 2

2**2 = 4

2**3 = 8

2**4 = 16

2**5 = 32

2**6 = 64

2**7 = 128

for 循环的 range 格式可以省略 key 和 value,如下实例:

实例

package main

import "fmt"


func main() {

   map1 := make(map[int]float32)

   map1[1] = 1.0

   map1[2] = 2.0

   map1[3] = 3.0

   map1[4] = 4.0

 

   // 读取 key 和 value

   for key, value := range map1 {

     fmt.Printf("key is: %d - value is: %f\n", key, value)

   }


   // 读取 key

   for key := range map1 {

     fmt.Printf("key is: %d\n", key)

   }


   // 读取 value

   for _, value := range map1 {

     fmt.Printf("value is: %f\n", value)

   }

}

以上实例运行输出结果为:

key is: 4 - value is: 4.000000

key is: 1 - value is: 1.000000

key is: 2 - value is: 2.000000

key is: 3 - value is: 3.000000

key is: 1

key is: 2

key is: 3

key is: 4

value is: 1.000000

value is: 2.000000

value is: 3.000000

value is: 4.000000

range 遍历其他数据结构:

实例

package main

import "fmt"

func main() {

   //这是我们使用 range 去求一个 slice 的和。使用数组跟这个很类似

   nums := []int{2, 3, 4}

   sum := 0

   for _, num := range nums {

       sum += num

   }

   fmt.Println("sum:", sum)

   //在数组上使用 range 将传入索引和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。

   for i, num := range nums {

       if num == 3 {

           fmt.Println("index:", i)

       }

   }

   //range 也可以用在 map 的键值对上。

   kvs := map[string]string{"a": "apple", "b": "banana"}

   for k, v := range kvs {

       fmt.Printf("%s -> %s\n", k, v)

   }


   //range也可以用来枚举 Unicode 字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。

   for i, c := range "go" {

       fmt.Println(i, c)

   }

}

以上实例运行输出结果为:

sum: 9

index: 1

a -> apple

b -> banana

0 103

1 111

目录
相关文章
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
550 2
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
837 1
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
734 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
568 0
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
601 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
1737 0
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
816 0

热门文章

最新文章