go语言从例子开始之Example29.关闭通道
2019-10-29 09:22 _天枢 阅读(259) 评论(0) 编辑 收藏 举报关闭 一个通道意味着不能再向这个通道发送值了。这个特性可以用来给这个通道的接收方传达工作已经完成的信息。
Example:
package main import "fmt" //在这个例子中,我们将使用一个 jobs 通道来传递 main() 中 Go协程任务执行的结束信息 //到一个工作 Go 协程中。当我们没有多余的任务给这个工作 Go 协程时 //我们将 close 这个 jobs 通道。 func main() { jobs := make(chan int, 5) done := make(chan bool) //这是工作 Go 协程。使用 j, more := <- jobs 循环的从jobs 接收数据。 //在接收的这个特殊的二值形式的值中,如果 jobs 已经关闭了,并且通道中所有的值都已经接收完毕, //那么 more 的值将是 false。当我们完成所有的任务时,将使用这个特性通过 done 通道去进行通知。 go func(){ for{ j, more := <-jobs if more{ fmt.Println("recevied jobs:", j) }else{ fmt.Println("recevied all jobs") done <- true return } } }() //这里使用 jobs 发送 3 个任务到工作函数中,然后关闭 jobs。 for i:=1; i<=3; i++{ jobs <- i fmt.Println("Send job:", i) } //关闭通道 close(jobs) //我们使用前面学到的通道同步方法等待任务结束。 <- done }
Result:
$ go run example.go Send job: 1 Send job: 2 Send job: 3 recevied jobs: 1 recevied jobs: 2 recevied jobs: 3 recevied all jobs
作 者:
天枢
出 处:
http://www.cnblogs.com/yhleng/
关于作者:专注于软件自动化测试领域。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者
直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角
【
推荐】
一下。您的鼓励是作者坚持原创和持续写作的最大动力!