首页
/
每日頭條
/
生活
/
go語言進階
go語言進階
更新时间:2026-01-06 22:11:02

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
推荐阅读
農村水田能種什麼蔬菜
農村水田能種什麼蔬菜
說起農村種菜,有很多退休的老人都很羨慕農村老人,為啥呢?就是因為有小菜園,想吃啥就可以種植啥!可是,就是在衆人都羨慕的眼光裡,出了一個問題。什麼問題呢?就是說農民自己種植的蔬菜,一旦用糞水澆灌後,就不能吃了?這裡面發生了什麼,又是什麼情況呢...
2026-01-06
臉部愛出油如何徹底解決這個問題
臉部愛出油如何徹底解決這個問題
現在的女性可能大都會出現臉上出油的現象,而且有時候還會非常嚴重,那麼你知道這是什麼原因嗎?要是你不清楚的話,下面就讓小編來告訴你吧。臉部出油生理原因:這可能是因為你在發育的時候,處于一個油脂旺盛的階段,這樣會顯得自己皮膚特别容易出油,而且還...
2026-01-06
廣西北海上年度平均工資
廣西北海上年度平均工資
4月29日,2020年第一季度廣西人才網薪酬報告發布。該季度,廣西人才網中用人單位發布職位的平均薪酬為5084元/月,環比下滑6.25%,但同比增長了6.23%。其中,區内南甯市為5583元/月、北海市則以5909元/月奪冠。區内主要工作地...
2026-01-06
探歌和柯珞克最新對比
探歌和柯珞克最新對比
很多手握15萬預算的消費者,在購買合資品牌的SUV時,對于一輛車的出身是非常看重的。在衆多車系之中,德系車憑借着卓越的品質,成為了各個年齡段消費者的首選。一直以來,斯柯達柯珞克的産品力和競争力一直都是不錯的,不僅與大衆一脈相承、繼承了超高的...
2026-01-06
髒水進眼睛裡了怎麼辦
髒水進眼睛裡了怎麼辦
髒水進眼睛裡了怎麼辦?髒水進眼睛後,需要馬上用清水進行清洗,以免傷害眼部,我來為大家科普一下關于髒水進眼睛裡了怎麼辦?以下内容希望對你有幫助!髒水進眼睛裡了怎麼辦髒水進眼睛後,需要馬上用清水進行清洗,以免傷害眼部。眼睛裡面進了髒水建議在第一...
2026-01-06
Copyright 2023-2026 - www.tftnews.com All Rights Reserved