前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >40. range和channel的close | 厚土Go学习笔记

40. range和channel的close | 厚土Go学习笔记

作者头像
李海彬
发布2018-03-28 12:09:49
5520
发布2018-03-28 12:09:49
举报
文章被收录于专栏:Golang语言社区Golang语言社区

一个 channel 值的发送者可以 close 这个 channel,用以表示没有值会被发送了。接收者可以通过赋值语句的第二个参数来测试 channel 是否被关闭。

当没有值可以接收并且 channel 已经被关闭,则

代码语言:javascript
复制
v, ok := <-ch

之后,ok会被设置为 false。

如果是

代码语言:javascript
复制
for i := range ch

会不断从 ch 接收值,直到 channel 被关闭。

请看示例

代码语言:javascript
复制
package main

import "fmt"

func fibonacci(n int, ch chan int)  {
    x, y := 0, 1
    for i := 0; i < n; i++{
        ch <- x
        x, y = y, x + y
    }
    close(ch)
}

func main() {
    ch := make(chan int, 10)
    go fibonacci(cap(ch), ch)
    for i := range ch{
        fmt.Println(i)
    }
}

运行结果

代码语言:javascript
复制
0
1
1
2
3
5
8
13
21
34

本例的 fibonacci(n int, ch chan int) 就是发送者。按照传送来的 n 值进行循环。循环完毕主动关闭了 ch。接收者利用 for i := range ch 循环接收 ch 传回的每一个值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档