(<- chan int) 和 (chan int)当函数返回值的区别是什么?

embiid · · 3359 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

当用(chan int)用作函数返回值时, 很明显是接收一个chan int, 然后可以进行读写操作 ```go func test1() { ch := returnChan1() defer close(ch) // 输出5 fmt.Println(<- ch) } func returnChan1() (chan int) { ch := make(chan int) go func() { ch <- 5 }() time.Sleep(time.Second) return ch } ``` 我不明白的是(<- chan int)用作函数返回值时, 到底是代表一个int,还是一个chan int ```go func test2() { ch := returnChan2() //defer close(ch) // 语法报错(为什么是一个chan还不能close?) fmt.Printf("test2: %p\n", ch) fmt.Println(<- ch) } func returnChan2() (<- chan int) { ch := make(chan int) go func() { ch <- 5 }() time.Sleep(time.Second) fmt.Printf("returnChan2: %p\n", ch) // return <- r // 语法报错 return ch } ``` 调用test2()的输出为: **returnChan2: 0xc04203c0c0** **test2: 0xc04203c0c0** **5** 我的疑问是: 1. <- chan int 如果返回的是int类型,为什么只能返回chan int类型? 2. <- chan int 如果返回的是chan int类型,虽然能通过<- ch来获取值,但是为什么不能执行close()操作? 3. <- chan int 如果返回的是chan int类型,那(<- chan int)和(chan int)作为函数返回值有什么区别呢?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3359 次点击  
加入收藏 微博
2 回复  |  直到 2019-06-15 15:03:15
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传