go两种遍历chan

  go中对通道chan遍历有两种方式一种是用range另一种为for select。

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
 
import (
    "fmt"
    "strings"
)
 
func main() {
    intChan0 := make(chan int, 10)
 
    for i := 0; i < 10; i++ {
        intChan0 <- i
    }
    close(intChan0)
 
    for i := range intChan0 {
        fmt.Printf("range i value is %d, pointer is %d\n", i, &i)
    }
 
    fmt.Println(strings.Repeat("-", 20))
 
    intChan1 := make(chan int, 10)
 
    for i := 0; i < 10; i++ {
        intChan1 <- i
    }
    close(intChan1)
 
forLoop:
    for {
        select {
        case i, ok := <-intChan1:
            if !ok {
                break forLoop
            }
            fmt.Printf("for select i value is %d, pointer is %d\n", i, &i)
        }
    }
 
}

 上面打印结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
range i value is 0, pointer is 824633794752
range i value is 1, pointer is 824633794752
range i value is 2, pointer is 824633794752
range i value is 3, pointer is 824633794752
range i value is 4, pointer is 824633794752
range i value is 5, pointer is 824633794752
range i value is 6, pointer is 824633794752
range i value is 7, pointer is 824633794752
range i value is 8, pointer is 824633794752
range i value is 9, pointer is 824633794752
--------------------
for select i value is 0, pointer is 824633794760
for select i value is 1, pointer is 824633794768
for select i value is 2, pointer is 824633794776
for select i value is 3, pointer is 824633794784
for select i value is 4, pointer is 824633794792
for select i value is 5, pointer is 824633794800
for select i value is 6, pointer is 824633794808
for select i value is 7, pointer is 824633794816
for select i value is 8, pointer is 824633794824
for select i value is 9, pointer is 824633794832

 使用golang版本为1.21,可以看出,rang读取chan内元素,其指针一样,for select每次不同。

通常情况下,当有其他for select有其他case分支使用for select。

  

posted @   ALXPS  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示