您现在的位置是:首页 > 编程 > 

Go程序例子(6):关闭通道

2025-07-28 15:05:51
Go程序例子(6):关闭通道 关闭通道表示不再向其发送值。这对于向通道的接收者传达完成状态非常有用。代码语言:go复制package main import "fmt" // 在这个示例中,我们将使用一个 jobs 通道将待处理的工作从 main() goroutine 传递到 worker goroutine。当我们没有更多的工作要分配给 worker 时,我们将关闭 j

Go程序例子(6):关闭通道

关闭通道表示不再向其发送值。这对于向通道的接收者传达完成状态非常有用。

代码语言:go复制
package main

import "fmt"
// 在这个示例中,我们将使用一个 jobs 通道将待处理的工作从 main() goroutine 传递到 worker goroutine。当我们没有更多的工作要分配给 worker 时,我们将关闭 jobs 通道。
func main() {
    jobs := make(chan int, 5)
    done := make(chan bool)
	// 这是 worker goroutine。它通过 j, more := <-jobs 反复从 jobs 通道接收。在这种特殊的接收形式中,当 jobs 通道被关闭且所有值都已被接收时,more 的值将为 false。我们利用这一点来通知任务完成,当我们处理完所有工作时。
    go func() {
        for {
            j, more := <-jobs
            if more {
                fmt.Println("received job", j)
            } else {
                fmt.Println("received all jobs")
                done <- true
                return
            }
        }
    }()
	// 这通过 jobs 通道向 worker 发送  个工作任务,然后关闭通道。
    for j := 1; j <= ; j++ {
        jobs <- j
        fmt.Println("sent job", j)
    }
    close(jobs)
    fmt.Println("sent all jobs")
	// 我们使用之前看到的同步方法等待 worker。
    <-done
	// 从关闭的通道读取会立即成功,返回底层类型的零值。可选的第二个返回值为 true,如果接收到的值是通过成功的发送操作传递到通道的;如果接收到的是因为通道已关闭且为空而生成的零值,则第二个返回值为 false。
    _, ok := <-jobs
    fmt.Println("received more jobs:", ok)
}

运行结果:

代码语言:javascript代码运行次数:0运行复制
$ go run closing-channels.go 
sent job 1
received job 1
sent job 2
received job 2
sent job 
received job 
sent all jobs
received all jobs
received more jobs: false

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1250803.html

相关标签:无
上传时间: 2025-07-27 18:21:14
留言与评论(共有 18 条评论)
本站网友 汇安人才
29分钟前 发表
_
本站网友 我去哪儿
12分钟前 发表
然后关闭通道
本站网友 geshigongc
7分钟前 发表
我们将关闭 jobs 通道
本站网友 枫丹丽舍房价
26分钟前 发表
_
本站网友 海尔商城网
22分钟前 发表
j) } else { fmt.Println("received all jobs") done <- true return } } }() // 这通过 jobs 通道向 worker 发送 个工作任务
本站网友 梦见牙齿掉了是什么意思
11分钟前 发表
<-done // 从关闭的通道读取会立即成功
本站网友 魅妆
13分钟前 发表
go func() { for { j
本站网友 流行性腮腺炎ppt
30分钟前 发表
我们将使用一个 jobs 通道将待处理的工作从 main() goroutine 传递到 worker goroutine
本站网友 蜂蜜减肥方法
9分钟前 发表
= make(chan bool) // 这是 worker goroutine
本站网友 1段奶粉
24分钟前 发表
Go程序例子(6):关闭通道 关闭通道表示不再向其发送值
本站网友 baidu指数
23分钟前 发表
more
本站网友 无锡房地产信息网
17分钟前 发表
more 的值将为 false
本站网友 万载县委书记
8分钟前 发表
j) } close(jobs) fmt.Println("sent all jobs") // 我们使用之前看到的同步方法等待 worker
本站网友 有效健康减肥方法
21分钟前 发表
= make(chan int
本站网友 桃仁的功效
25分钟前 发表
= make(chan int
本站网友 灰指甲图片
4分钟前 发表
代码语言:go复制package main import "fmt" // 在这个示例中
本站网友 7fgame
0秒前 发表
j) } close(jobs) fmt.Println("sent all jobs") // 我们使用之前看到的同步方法等待 worker