分享
  1. 首页
  2. 文章

go语言channel关注点

htyu_0203_39 · · 1724 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main
import (
 "fmt"
)
func main() {
 //case 1: 对一个nil channel 进行写将发生阻塞.
 //var c chan int //go语言自动对未初始化的变量赋其类型对应的零值,如: nil, 0, ""等.
 //c <- 1
 //case 2: 对一个nil channel 进行读将发生阻塞.
 //<- c
 //case 3: 对一个已经关闭的unbuffered channel进行写操作,将发生panic异常.
 //c1 := make(chan int)
 //close(c1)
 //c1 <- 1
 //case 4: 对一个已经关闭的unbuffered channel进行读操作,返回channel元素类型的零值,如:false,o,nil等
 //x := <- c1
 //fmt.Println(x)
 //case 5: 对一个已经关闭的buffered channel进行读操作,见以下代码注释.
c2 := make(chan int, 3)
 c2 <- 1
c2 <- 2
c2 <- 3
close(c2)
 //尽管channel 已经关闭了, 但是我们依然可以从中读出关闭前写入的3个值,自第4次开始读取时,则返回该channel元素类型对应的零值: 0,
 //即使仍继续不断读取,仍然是零值.
fmt.Printf("%d\n", <- c2)
 fmt.Printf("%d\n", <- c2)
 fmt.Printf("%d\n", <- c2)
 fmt.Printf("%d\n", <- c2)
 fmt.Printf("%d\n", <- c2)
 fmt.Printf("%d\n", <- c2)
 //case 6: 对一个已经关闭的buffered channel进行写操作,将发生panic异常.
c2 <- 4
//大原则: 1. 最好由生产者或称写入者负责关闭channel,这样可以有效避免发生panic异常.
 //2. 不带缓冲的channel本身具有通信同步两个特点,channel是线程安全的,协成安全的,可多个goroutine共享使用不必加锁保护它.
}
参考: http://tonybai.com/2014/09/29/a-channel-compendium-for-golang/ 
简单整理细化一下,写代码测试了一下,怕忘了写下笔记,感谢参考文章作者,读其文章令我受益匪浅,在此表达感谢。
注意: 此文章只是我个人笔记, 如有错漏,请一定指正, 共同学习, 我的邮箱: htyu_0203_39@sina.com

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

本文来自:CSDN博客

感谢作者:htyu_0203_39

查看原文:go语言channel关注点

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏