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 删除。