Golang-Channel & Goroutine-基础篇

说到Go最精华的部分就是concurrency的部分了
包含的范围蛮广的,当初在看的时候也是看得满头包,但总结可以分成下列几个

  • Goroutine
  • Channel
  • Package sync
  • Package runtime

新增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(chan int<-int)
  • 单向:读取channel(<-chan int)
  • 双向:写入&读取channel(chan int)

而双向channel传入function时可以被转换成单向channel
但是单向channel回传没办法再转换成双向channel

Channel赋值&闭关

闭关channel,使用close(channel)

ch:=make(chan int)
close(ch)

透过channel赋值跟一般宣告的方法一样,不过多上一个parameter可以判断channel是否已经闭关

ch:=make(chan int)
val,ok:=<-ch
if ok{
    log.Println(val)
}

<<:  React和DOM的那些事-节点新增算法

>>:  【文字分析】3-4 TF-IDF文字概念

@Day7 | C# WixToolset + WPF 帅到不行的安装包 [自订页面-增加自订页面]

现在 我们了解了官方UI里面的架构与流程以後,我们建立一个自订页面, 在github内Dlg结尾的,...

WFH 仪式感/ 场域转换新创 心得

<img src="https://miro.medium.com/max/700/0*4Pr...

目前的命题 | ML#Day11

根据前面作业做个检讨,决定新的题目需要有这些条件: 简单、明确,即使团队未参与ml研究的同仁,对於我...

【Day6】:GPIO输入输出(中)

GPIO 输出-LED闪烁 昨天我们成功将脚位设定成输出模式,现在我们将PB0脚位设定为输出模式。会...

【Day24】[演算法]-希尔排序法Shell Sort

希尔排序法(Shell Sort)是插入排序(Insertion Sort)的改良版。可减少插入排序...