前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go编程基础-基础篇 12

Go编程基础-基础篇 12

原创
作者头像
未来最可爱的人
修改2021-03-21 18:38:50
3120
修改2021-03-21 18:38:50
举报
文章被收录于专栏:编程基础编程基础

range

基本用法

range 可以用来遍历的对象有数组、切片、map、字符串以及通道。遍历的对象不同,range 的返回值也会有所不同。遍历数组、切片和字符串时,它返回的就是数据的索引和值。遍历map时返回的就是map的key和value。而遍历通道时则只返回通道中的数据。

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("---数组的遍历---")
	//遍历数组
	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
		}
	}
}
---字符串的遍历---
索引:0,值:C
索引:1,值:o
索引:2,值:d
索引:3,值:e
索引:4,值:y
---数组的遍历---
索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:4
索引:4,值:5
---切片的遍历---
索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:4
索引:4,值:5
---map的遍历---
key:Apple,value:苹果
key:Orange,value:橘子
key:Banana,value:香蕉
---通道的遍历---
值:10
值:11
值:12
值:13
值:14

可以使用_来接收不需要使用的值。如果是只想用索引的话,可以直接只用一个参数接收遍历对象传出的值,默认只会接收索引。

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)
	}
}
---map的key值---
key:Apple
key:Orange
key:Banana
---map的value值---
value:橘子
value:香蕉
value:苹果

无法通过range输出的值来修改遍历的对象,因为range相当于声明了两个变量,这两个变量逐一复制了遍历对象中的值,归根结底还是因为 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)
	}
}
索引:0,索引地址:0xc0000180a8
值:1,值地址:0xc0000180b0
索引:1,索引地址:0xc0000180a8
值:2,值地址:0xc0000180b0
索引:2,索引地址:0xc0000180a8
值:3,值地址:0xc0000180b0
索引:3,索引地址:0xc0000180a8
值:4,值地址:0xc0000180b0
索引:4,索引地址:0xc0000180a8
值:5,值地址:0xc0000180b0

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • range
    • 基本用法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档