Go --- for range会使通道中的缓存值被取出

简介: Go --- for range会使通道中的缓存值被取出

今天在《Go语言高级编程》这本书中发现这么一段代码

上面的代码中消费者没有从通道中取值的操作像 <- ch,却可以一直运行,这让我怀疑是不是在for range 过程中将通道的缓存值取出了

于是我开始测试:

package main
import "fmt"
func main() {
// 测试for range是否会使通道中的缓存值取出
  ch := make(chan int,4)
  for i := 0; i < cap(ch); i++ {
    ch <- i
  }
  fmt.Println(len(ch))
  // for range可以使通道中的缓存值被取出
  for range ch {
    //fmt.Println(v)
    fmt.Println("len:", len(ch))
  }
}

运行结果如下

可以确认的是:for range 确实会使通道缓存中的值被取出。


相关文章
|
1月前
|
供应链 Go
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
掌握Go语言:利用Go语言的单向通道和select语句,提升库存管理效率(21)
|
1月前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
1月前
|
存储 缓存 安全
Go 简单设计和实现可扩展、高性能的泛型本地缓存
本文将会探讨如何极简设计并实现一个可扩展、高性能的本地缓存。支持多样化的缓存策略,例如 最近最少使用(LRU)等。
80 0
Go 简单设计和实现可扩展、高性能的泛型本地缓存
|
1月前
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
59 0
|
1月前
|
Go
通道多路复用:Go语言并发编程的黄金法则
通道多路复用:Go语言并发编程的黄金法则
48 0
|
1月前
|
安全 Go
Go语言并发新特性:单向通道的读写控制
Go语言并发新特性:单向通道的读写控制
52 0
|
1月前
|
缓存 Go API
Go 实现一个支持多种过期、淘汰机制的本地缓存的核心原理
本文旨在探讨实现一个支持多种 过期、淘汰 机制的 go 本地缓存的核心原理,我将重点讲解如何支持多样化的过期和淘汰策略。
94 0
|
7月前
|
Cloud Native Go 索引
GO 的 range 如何使用?
GO 的 range 如何使用?
|
1月前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
7天前
|
缓存 安全 算法
Go 中使用 map 实现高效的数据缓存
Go 中使用 map 实现高效的数据缓存