说到Go最精华的部分就是concurrency的部分了
包含的範围蛮广的,当初在看的时候也是看得满头包,但总结可以分成下列几个
新增Gorouting
只需要加上关键字go
go func()
Channel初始化
要使用make
chan:=make(chan Type, Cap)
Channel又可以分成
Buffered Channel 有着非同步的特性UnBuffered Channel 有着同步的特性后面会解释到同步与非同步的特性
宣告channel最后总结是下列这样
unBufferedIntChan:=make(chan int)bufferedStringChan:=make(chan string, 100)
Channel读取&写入
channel可以分成三种类别
关键符号是 <-
比较好判断的方法就是看箭头指向哪
而双向channel传入function时可以被转换成单向channel
但是单向channel回传没办法再转换成双向channel
Channel赋值&闭关
闭关channel,使用close(channel)
ch:=make(chan int)close(ch)
透过channel赋值跟一般宣告的方法一样,不过多上一个parameter可以判断channel是否已经闭关
ch:=make(chan int)val,ok:=<-chif ok{ log.Println(val)}