go語言 channel使用 二十一

2021-10-20 15:55:54 字數 1733 閱讀 1754

1. channel介紹

2. 通過channel實現同步

import (

"fmt"

"time"

)var ch = make(chan int)

func printer(str string)

fmt.printf("\n")

}//person1執行完成後,才能到person2執行

func person1(str string)

func person2(str string)

func main()

}

3.通過channel實現同步和資料交換

func main() 

ch }()

fmt.printf("主線程呼叫完畢")

}

channel 分為不帶快取的 channel 和帶快取的 channel。

無快取的 channel

從無快取的 channel 中讀取訊息會阻塞,直到有 goroutine 向該 channel 中傳送訊息;同理,向無快取的 channel 中傳送訊息也會阻塞,直到有 goroutine 從 channel 中讀取訊息。

4. 無快取的 channel

從無快取的 channel 中讀取訊息會阻塞,直到有 goroutine 向該 channel 中傳送訊息;同理,向無快取的 channel 中傳送訊息也會阻塞,直到有 goroutine 從 channel 中讀取訊息。

5. 有快取的 channel

有快取的 channel 的宣告方式為指定 make 函式的第二個引數,該引數為 channel 快取的容量

ch := make(chan int, 10)
有快取的 channel 類似乙個阻塞佇列(採用環形陣列實現)。當快取未滿時,向 channel 中傳送訊息時不會阻塞,當快取滿時,傳送操作將被阻塞,直到有其他 goroutine 從中讀取訊息;相應的,當 channel 中訊息不為空時,讀取訊息不會出現阻塞,當 channel 為空時,讀取操作會造成阻塞,直到有 goroutine 向 channel 中寫入訊息。

}6. 關閉channel

7. 通過range遍歷channel內容

func main() 

close(ch)

fmt.println("new task is closed")

}()for

}}

8.  單方向的channel

go語言 channel特點

通道擁有阻塞機制 無緩衝區 有緩衝區同理。接收端在傳送端資料傳送完成之前 通道為nil 處於阻塞狀態 傳送端在接收端資料拿走完成之前 通道為滿 處於阻塞態 1.struct 型別不佔空間,作為通道的一種訊號方式 2.chan型別為引用型別,故需要進行初始化,申請空間,在通道使用結束後close 關閉...

go 通道 go語言通道channel

通過使用通道,在多個goroutine傳送和接受共享的資料,達到資料同步的目的。通道,他有點像在兩個routine之間架設的管道,乙個goroutine可以往這個管道裡塞資料,另外乙個可以從這個管道裡取資料,有點類似於我們說的佇列。宣告乙個通道很簡單,我們使用chan關鍵字即可,除此之外,還要指定通...

Go語言學習 channel

channel俗稱管道,用於資料傳遞或資料共享,其本質是乙個先進先出的佇列,使用goroutine channel進行資料通訊簡單高效,同時也執行緒安全,多個goroutine可同時修改乙個channel,不需要加鎖。channel可分為三種型別 channel使用 定義和宣告 var readon...