首页
/
每日頭條
/
生活
/
go語言進階
go語言進階
更新时间:2025-10-29 12:47:39

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
推荐阅读
鳳姐當年的惡劣言論
鳳姐當年的惡劣言論
鳳姐閑着無聊就發發微博和我們互動,自從去了美國後就越來越愛發微博了,厲害了我的鳳姐啊。不過今天鳳姐的提問是為什麼她那麼喜歡荒山野嶺呢?因為有小樹林嗎?鳳姐要表達的意思應該是山山水水吧,不過這個指示牌的确有點污啊。荒山野嶺可以變身成奧特曼嗎?...
2025-10-29
客家炸肉丸做法
客家炸肉丸做法
2分鐘教會你做客家炸肉丸,操作簡單,又香又嫩,學會可以開店了。距離過年隻有十天時間了,相信很多人都跟小編一樣每天都在忙碌着準備年貨吧?昨天小編跟大家分享了客家炸魚丸,看到很多小夥伴都特别喜歡這樣詳細講解的菜譜,小編決定每天做年貨的同時都會把...
2025-10-29
最終幻想紛争nt入門教學
最終幻想紛争nt入門教學
《最終幻想:紛争NT》今日登陸了Steam平台,遊戲可以免費開玩,但也有售價155元的标準版和233元的豪華版。《最終幻想:紛争NT》标準版售價155元,包括28名角色,含故事模式在内的所有模式;豪華版售價233元,包括标準版内容,季票。S...
2025-10-29
黃金劃痕處理小妙招
黃金劃痕處理小妙招
黃金劃痕處理小妙招?進行重活或體力活動時不要佩戴;不佩戴的時候,将黃金戒指單獨存放在珠寶盒或麂皮袋中,以防與其它珠寶飾品摩擦産生劃痕,下面我們就來聊聊關于黃金劃痕處理小妙招?接下來我們就一起去了解一下吧!黃金劃痕處理小妙招進行重活或體力活動...
2025-10-29
自然堂20周年專場
自然堂20周年專場
美國《心理科學》雜志上的一項研究顯示最近十幾年間,人們對種族、膚色的歧視有所下降,但對于肥胖者的“隐形歧視”不降反升。從互聯網上人們對明星身材走樣、容顔衰老的惡評看來,女性是這種“隐性歧視”的主要對象。“那個女的這麼胖,坐飛機怕要買兩張票吧...
2025-10-29
Copyright 2023-2025 - www.tftnews.com All Rights Reserved