iT邦幫忙

0

Golang-Channel & Goroutine-基礎篇

  • 分享至 

  • xImage
  •  

說到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)
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言