Understanding Chan Chan's in Go
来源:互联网 发布:2017淘宝规则 编辑:程序博客网 时间:2024/05/22 10:49
转自老外的文章:http://tleyden.github.io/blog/2013/11/23/understanding-chan-chans-in-go/
A channel describes a transport of sorts. You can send a thing down that transport. When using a chan chan, the thing you want to send down the transport is another transport to send things back.
They are useful when you want to get a response to something, and you don’t want to setup two channels (it’s generally considered bad practice to have data moving bidirectionally on a single channel)
Visual time lapse walkthrough
Keep in mind that Goroutine C is the “real consumer” even though it will be the one which writes to the request channel.
The request channel starts out empty.
Goroutine C passes a “response channel” to go routine D via the request channel
Goroutine C starts reading from the (still empty) response channel.
Goroutine D writes a string to the response channel
Goroutine C now is able to read a value from response channel, and get’s the “wassup!” message
And now we are back to where we started
Here is some code that uses chan chan’s
12345678910111213141516171819202122232425262728293031323334353637383940414243
package mainimport "fmt"import "time"func main() { // make the request chan chan that both go-routines will be given requestChan := make(chan chan string) // start the goroutines go goroutineC(requestChan) go goroutineD(requestChan) // sleep for a second to let the goroutines complete time.Sleep(time.Second)}func goroutineC(requestChan chan chan string) { // make a new response chan responseChan := make(chan string) // send the responseChan to goRoutineD requestChan <- responseChan // read the response response := <-responseChan fmt.Printf("Response: %v\n", response)}func goroutineD(requestChan chan chan string) { // read the responseChan from the requestChan responseChan := <-requestChan // send a value down the responseChan responseChan <- "wassup!"}
This code can be run on Go playground
- Understanding Chan Chan's in Go
- GO通道chan
- GO中chan的理解
- go语言chan 和 routine活用
- go chan使用 匿名函数执行
- go:chan分为阻塞和非阻塞
- mutex&chan
- Go 通道(chan)关闭和后续读取操作
- go语言函数传递问题(map、切片、接口、chan)
- Mr. G. Chan ——Chinese writers in English
- 《功夫熊猫》chan
- C++chan常用API
- Chan Spreadsheet 1.2
- chan-vese模型
- golang 并发 chan
- Golang之chan/goroutine
- 关于GOLANG的chan
- golang chan的运用
- 解决Python使用wxpy模块登录微信。就会抛出异常错误。
- Java面试题全集(中)
- 调试技巧——宏定义开关和printf
- oracle更改用户的密码
- (二)Java概述
- Understanding Chan Chan's in Go
- Ubuntu上配置SSD-caffe+运行demo+训练测试自己的数据集
- [Easy] CodeForces
- pycharm 和 anaconda安装注意项
- Android Base64转换图片,SimpleAdapter动态显示Bitmap图片
- 如何修改订单金额实现 0.01 元买 iPhone X?
- etcd-v2第四集
- 了解百度原理才是做seo的灵魂
- Tony.SerialPorts.RS232串口参数配置模块:扫描事件例程