日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go语言学习笔记 - PART13 - 协程与通道

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go语言学习笔记 - PART13 - 协程与通道 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

協(xié)程

應(yīng)用程序處理并發(fā)的部分

  • 協(xié)程跟操作系統(tǒng)的線程之間不是一對(duì)一的關(guān)系
  • 協(xié)程是獨(dú)立執(zhí)行的,它們之間必須同行才會(huì)變得有用

通道

負(fù)責(zé)協(xié)程之間的通信,從而避免所有由共享內(nèi)存導(dǎo)致的陷阱

  • 通道只能傳輸一種類型的數(shù)據(jù)(任意一種類型)
  • 通道聲明方式
var ch1 chan string // 聲明一個(gè)字符串通道ch1 = make(chan string) // 實(shí)例化通道 復(fù)制代碼
  • 通信操作符 : 標(biāo)識(shí)數(shù)據(jù)的傳輸,數(shù)據(jù)按照箭頭的方向流動(dòng)
// 往通道發(fā)送數(shù)據(jù)ch <- i 復(fù)制代碼
  • for循環(huán)從通道中獲取數(shù)據(jù)
for v := range ch {fmt.Printf("The value is %v\n", v)} 復(fù)制代碼
  • 指定通道的方向
var send_only chan<- int // 只接收數(shù)據(jù)的通道var recv_only <-chan int // 只發(fā)送數(shù)據(jù)的通道 復(fù)制代碼
  • 關(guān)閉通道
    • 通道是可以被顯示關(guān)閉的;只有發(fā)送方需要關(guān)閉通道,接收方不需要關(guān)閉通道
    • close函數(shù)關(guān)閉通道
      • 將通道標(biāo)記為無法通過發(fā)送操作<-接受更多的值;給已經(jīng)關(guān)閉的通道發(fā)送或者再次關(guān)閉都會(huì)導(dǎo)致運(yùn)行時(shí)的 panic
    • 檢測通道是否關(guān)閉
v, ok := <-ch // 使用, ok操作符檢測通道是否關(guān)閉 復(fù)制代碼

協(xié)程切換

select {case u:= <- ch1:...case v:= <- ch2:......default: // no value ready to be received...} 復(fù)制代碼
  • 通過select關(guān)鍵字,從不同的并發(fā)執(zhí)行的協(xié)程中獲取值
  • select關(guān)鍵字可以監(jiān)聽進(jìn)入通道的數(shù)據(jù)或從通道出去的數(shù)據(jù)
  • select 要做的事,選擇處理列出多個(gè)通信情況中的一個(gè)
    • 如果都阻塞了,會(huì)等待知道其中一個(gè)可以處理
    • 如果多個(gè)可以處理,隨機(jī)選擇一個(gè)
    • 如果沒有通道操作可以處理,但寫了default語句,它就會(huì)執(zhí)行default(確保不被阻塞)

入門教程推薦: github.com/Unknwon/the…

總結(jié)

以上是生活随笔為你收集整理的Go语言学习笔记 - PART13 - 协程与通道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。