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

  

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)
}
} }

上面打印结果为

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。

  

go两种遍历chan的更多相关文章

  1. HashMap的两种遍历方式

    HashMap的两种遍历方式 HashMap存储的是键值对:key-value . java将HashMap的键值对作为一个整体对象(java.util.Map.Entry)进行处理,这优化了Hash ...

  2. Map的两种遍历方式

    ********************************************************************************* ****************** ...

  3. HashMap两种遍历方式的深入研究

    转自:http://swiftlet.net/archives/1259 HashMap的遍历有两种方式,如下所示:第一种利用entrySet的方式:   1 2 3 4 5 6 7 Map map ...

  4. HashMap两种遍历数据的方式

    HashMap的遍历有两种方式,一种是entrySet的方式,另外一种是keySet的方式. 第一种利用entrySet的方式: Map map = new HashMap(); Iterator i ...

  5. Map集合的两种遍历方式

    Map集合:即 接口Map<K,V> map集合的两种取出方式:    1.Set<k> keyset: 将map中所有的键存入到set集合(即将所有的key值存入到set中) ...

  6. Java HashMap两种遍历方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  7. python中的字典两种遍历方式

    dic = {"k1":"v1", "k2":"v2"} for k in dic: print(dic[K]) for ...

  8. hashmap两种遍历方法

    第一种:使用entryset来进行遍历 Map map=new HashMap(); Iterator iter=map.entrySet().iterator(); while(iter.hasNe ...

  9. dict两种遍历方法

    采用for...in...遍历: >>> for i in dd: ... print("%s:%s"%(i,dd[i])) ... :chen :hang :w ...

  10. 图的两种遍历:DFS&BFS

    DFS和BFS在图中的应用: 图连通性判定:路径的存在性:图中是否存在环:求图的最小生成树:求图的关键路径:求图的拓扑排序. DFS:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走 ...

随机推荐

  1. 如何用低代码实现批量导出PDF?

    前言 事情是这样的,熟悉我们的朋友都知道,我司有一个为广大开发者朋友们提供学习帮助的地方,叫做新手训练营,具体的内容就是会针对初次接触葡萄城产品和技术的用户,通过 2-3 天的集中学习,采用直播授课的 ...

  2. 从 KeyStore 中获取 PublicKey 和 PrivateKey

    KeyStore(译:密钥存储库) 代表用于加密密钥和证书的存储设施. KeyStore 管理不同类型的 entry(译:条目).每种类型的 entry 都实现了 KeyStore.Entry 接口. ...

  3. java 从零开始手写 RPC (02)-netty4 实现客户端和服务端

    说明 上一篇代码基于 socket 的实现非常简单,但是对于实际生产,一般使用 netty. 至于 netty 的优点可以参考: 为什么选择 netty? http://houbb.github.io ...

  4. 【OpenGL ES】MVP矩阵变换

    1 前言 ​ 本文主要介绍 MVP 矩阵变换,其本质是线性变换,应用见→绘制立方体. Model:模型变换,施加在模型上的空间变换,包含平移变换(translateM).旋转变换(rotateM).对 ...

  5. Spring Cloud Openfeign微服务接口调用与Hystrix集成实战

    关于openfeign 可以认为OpenFeign是Feign的增强版,不同的是OpenFeign支持Spring MVC注解.OpenFeign和Feign底层都内置了Ribbon负载均衡组件,在导 ...

  6. P3374 【模板】树状数组 1(线段树)

    [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,m ,分别表示该数列数字的个数和操作的总个 ...

  7. SQL Server使用常见问题

    普通分页查询 三种方式: Top Not IN 方式:查询靠前的数据较快 ROW_NUMBER() OVER()方式:查询靠后的数据速度比上一种较快,在老版本的SQL Server中最常使用 offs ...

  8. 微服务程序运行步骤及nameko入门案例

    首先一个微服务应用程序需要有服务的生产者和服务的消费者,另外还需要一个注册中心来管理和调度服务 1.服务提供方,即生产者启动服务,并将服务提交到注册中心注册服务 2.服务需求方,即消费者连接到注册中心 ...

  9. 02、etcd单机部署和集群部署

    上一章我们认识了etcd,简单的介绍了 etcd 的基础概念,但是理解起来还是比较抽象的.这一章我们就一起来部署下 etcd .这样可以让我们对 etcd 有更加确切的认识. 1.etcd单实例部署 ...

  10. 影刀rpa:关于if单条件切换到多条件时的不便之处

    现有需求,只判断一个条件是否满足即可,但随着后续业务开发,这里得if就需要判断多个条件,此时要是想将if单条件改为多条件的话,就得先拉一个if多条件的指令,然后再将if单条件中的语句全部移动到if多条 ...