首页
/
每日頭條
/
生活
/
go語言進階
go語言進階
更新时间:2025-12-26 21:55:19

go語言進階?channel管道Channel是Go中的一個核心類型,你可以把它看成一個管道,通過它并發核心單元就可以發送或者接收數據進行通訊(communication),下面我們就來說一說關于go語言進階?我們一起去了解并探讨一下這個問題吧!

go語言進階(Go語言學習第三周)1

go語言進階

channel管道

Channel是Go中的一個核心類型,你可以把它看成一個管道,通過它并發核心單元就可以發送或者接收數據進行通訊(communication)。

它的操作符是箭頭 <-

創建channel

msg := make(chan string 3)

數據寫入channel

msg <- "你好"

msg <- "在嗎"

讀取channel

message := <-msg

fmt.Println(message)

fmt.Println(<-msg)

讀取結果:你好 在嗎

channel 結合gorouting

package main import ( "fmt" "time" ) func main() { msg := make(chan int, 3) go test(msg) //寫入數據 for i := 0; i < 10; i { msg <- i fmt.Println("寫入數據", i) time.Sleep(time.Second * 1) } } func test(m chan int) { for { //不停的讀取 fmt.Println("讀取數據", <-m) } }

運行結果:

寫入數據 0 讀取數據 0 寫入數據 1 讀取數據 1 寫入數據 2 讀取數據 2 寫入數據 3 讀取數據 3 寫入數據 4 讀取數據 4 寫入數據 5 讀取數據 5 寫入數據 6 讀取數據 6 寫入數據 7 讀取數據 7 寫入數據 8 讀取數據 8 寫入數據 9 讀取數據 9

這裡需要注意一下make(chan int, 3) 這個語法意思是管道中有三個緩存int空間,當這個緩存賽滿了,就需要阻塞,等待另一個線程取出數據後再寫入。

channel的關閉

close(管道名)

package main import ( "fmt" "time" ) func main() { msg := make(chan int, 3) go test(msg) //寫入數據 for i := 0; i < 10; i { msg <- i fmt.Println("寫入數據", i) time.Sleep(time.Second * 1) } close(msg) //關閉管道 } func test(m chan int) { for { //不停的讀取 data, ok := <-m if ok == true { fmt.Println("讀取數據", data) } else { break } } }

channel和range

range可以更方便的讀取管道中的數據

把上面的test方法修改一下

func test(m chan int) { for i := range m { fmt.Println("讀取數據:", i) } }

channel 和select

如果有同時多個case去處理,比如同時有多個channel可以接收數據,那麼Go會僞随機的選擇一個case處理(pseudo-random)。如果沒有case需要處理,則會選擇default去處理,如果default case存在的情況下。如果沒有default case,則select語句會阻塞,直到某個case需要處理。

import "fmt" func fibonacci(c, quit chan int) { x, y := 0, 1 for { select { case c <- x: x, y = y, x y case <-quit: fmt.Println("quit") return } } } func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) }

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
布藝沙發怎樣去除異味
布藝沙發怎樣去除異味
1、首先,教大家一種最簡單最環保的去異味方法,即在布藝沙發旁擺放淨化空氣的綠色植物,如綠蘿等。綠色植物能吸附布藝沙發散發出來的氣味,還能給環境增添生氣。2、其次,教大家一種用水果皮去異味的方法,即在布藝沙發旁擺桔皮、檸檬皮。桔皮和檸檬皮都會散發出清新的氣味,還能吸附空氣中的異味,淨化空氣。3、再次,...
2025-12-26
蒸排骨怎麼做
蒸排骨怎麼做
1、準備好肋排和木耳。肋排洗淨放清水中浸泡去除血水,期間多換幾次水。2、木耳提前用清水泡發,搓洗幹淨。蔥,姜,蒜,紅椒分别切小。3、泡好的肋排控幹水份放盆中加料酒,蚝油,鹽,細砂糖,胡椒粉,蔥姜蒜紅椒和豆豉。4、攪拌均勻後腌15分鐘後加入生粉拌勻。5、木耳平鋪在盆底,将腌好的肋排放在木耳上,放入蒸鍋...
2025-12-26
怎麼選擇木地闆的顔色
怎麼選擇木地闆的顔色
1、木地闆顔色的确定應當根據家庭裝飾面積的大小、整體裝飾格調而定木地闆十大品牌)。若房間面積大且采光充足,則宜選用較深色彩、紋理較粗的木地闆,使較大的房間變得相對緊湊;相反,小面積的房間可選用淺色、紋理細緻的木地闆,給人以開闊感,也會使較小的房間顯得較為寬敞。2、不同的木地闆會給人造成不一樣的感受,...
2025-12-26
不用工具如何使用12306官網自動搶票功能
不用工具如何使用12306官網自動搶票功能
第一、登陸12306官網,點擊車票預定,搜索你想要購買的車次第二、這裡有個訂票幫手,很多人都忽略了,我們點開它第三、可以看到有很多篩選條件,我們根據自己的需要勾選第四、勾選完後,點擊右上方查詢按鈕第五、可以看到,離下次刷新時間5秒,意思是每5秒鐘就刷新一下車次和座位信息,這就是開始自動搶票了第六、如...
2025-12-26
牛奶放冰箱可以儲存多久
牛奶放冰箱可以儲存多久
1、新鮮牛奶在開封的情況下,将其放入冰箱冷藏保存時,一般可以保存1~3天左右。若是将沒有開封的新鮮牛...
2025-12-26
Copyright 2023-2025 - www.tftnews.com All Rights Reserved