• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
留白
世人慌慌张张,不过图碎银几两
博客园    首页    新随笔       管理    订阅  订阅
go tour --Channels 与 Buffered Channels

无缓冲通道(阻塞通道) 写入后立即阻塞,需要另一个协程读取通道的数据后,才能继续执行。

通道操作符

ch <- v    // Send v to channel ch.
v := <-ch  // Receive from ch, and
           // assign value to v.

无缓冲通道

ch := make(chan int)

有缓冲通道

ch := make(chan int, 100)

发送方可以关闭通道以指示不再发送值

close(c)

接收方可以以第二个返回值确认通道是否关闭

v, ok := <-ch

循环重复从通道接收值,直到通道关闭。

 for i := range c

channel 不像文件;你通常不需要关闭它们。只有当接收者必须被告知没有更多的值时,关闭是必要的,例如终止一个range 循环。

package main

import (
	"fmt"
)

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

func main() {
	c := make(chan int, 10)
	go fibonacci(cap(c), c)
	for i := range c {
		fmt.Println(i)
	}
}
posted on 2020-07-20 14:35  留白s  阅读(137)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3