码迷,mamicode.com
首页 > 其他好文 > 详细

go tour --Channels 与 Buffered Channels

时间:2020-07-20 15:23:45      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:关闭   发送   and   send   rom   阻塞   接收   需要   from   

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

通道操作符

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)
	}
}

go tour --Channels 与 Buffered Channels

标签:关闭   发送   and   send   rom   阻塞   接收   需要   from   

原文地址:https://www.cnblogs.com/t0000/p/13344941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!