我正在try 创建一个异步通道,我一直在考虑http://golang.org/ref/spec#Making_slices_maps_and_channels个.

c := make(chan int, 10)         // channel with a buffer size of 10

缓冲区大小为10是什么意思?缓冲区大小具体表示/限制是什么?

推荐答案

buffer size是在没有发送阻塞的情况下可以发送到通道的元素数.默认情况下,通道的缓冲区大小为0(make(chan int)).这意味着每一次发送都将被阻止,直到另一个goroutine从该通道接收.缓冲区大小为1的通道在发送块之前可以容纳1个元素,因此

c := make(chan int, 1)
c <- 1 // doesn't block
c <- 2 // blocks until another goroutine receives from the channel

Go相关问答推荐

golang 的条件储存库

即使HTTP服务器正在使用GO和Protobuf、SQL Server启动,请求也不返回结果

Docker Compose Health Check未退出,错误为无法启动

提供的client_secret与此帐户上任何关联的SetupIntent都不匹配

Go:拆分一个由逗号分隔的键/值对字符串,并在给定的键/价值对中嵌入可能的逗号

Golang Gorm Fiber / argon2.Config 未定义

Go Template 动态获取变量

Golang Docker Selenium Chrome

正确的 shell 程序进入 golang alpine docker 容器的入口点?

Exchange Web 服务 - 使用 soap xml 请求查找所有未读邮件

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

自定义 Fyne 自适应网格布局

使用模拟在 golang 中测试我的界面.专门测试调用同级函数的 1 个函数

如何在 GORM 中迭代一个 int 数组

分配空切片而不引用其类型?

在 connect-go 拦截器中修改响应体

将 Simple Go Web 应用程序部署到 Elastic Beanstalk

GOENV 只能使用 OS 环境设置

GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件

Beego - 我需要context.Context而不是 Beego 上下文