建立字串型別通道和每 2 秒向通道傳送訊息的 Goroutine 的 Go 語言程式
在 Go 中,通道是併發程式設計中一個強大的特性,它能夠在 goroutine 之間實現通訊和同步。在本文中,我們將探討如何在 Go 中建立字串型別的通道,並使用一個 goroutine 以 2 秒的固定間隔向通道傳送訊息。我們將逐步演示程式,展示通道和 goroutine 的用法。
語法
time.NewTicker(time.Second)
語法 `time.NewTicker(time.Second)` 用於從 Go 中的 time 包建立新的 Ticker 值。
time.Sleep(duration)
語法 `time.Sleep(duration)` 用於暫停程式或 goroutine 的執行指定持續時間。
演算法
步驟 1 − 匯入指定的包 −
步驟 2 − 匯入 fmt 包用於向控制檯列印訊息。
步驟 3 − 匯入 time 包用於管理時間相關的操作。
步驟 4 − 使用 make 函式建立字串型別的通道:`ch := make(chan string)`。建立一個 goroutine −
步驟 5 − 使用 `time.Sleep` 函式在每個訊息之間延遲執行 2 秒。
步驟 6 − 使用通道管理器作為 main.go。
步驟 7 − 開啟終端或命令提示符,導航到檔案的目錄,並使用 go run 命令執行程式:`go run main.go`。
示例 1
在本例中,我們建立通道 ch,啟動 goroutine 向通道傳送訊息,然後在主 goroutine 中使用無限 for 迴圈持續接收並列印訊息。
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(time.Second)
tickerChan := ticker.C
done := make(chan bool)
go func() {
for {
select {
case <-tickerChan:
fmt.Println("Ticker ticked!")
case <-done:
return
}
}
}()
time.Sleep(5 * time.Second)
done <- true
ticker.Stop()
fmt.Println("Ticker stopped.")
}
輸出
Ticker ticked! Ticker ticked! Ticker ticked! Ticker ticked! Ticker ticked! Ticker stopped.
示例 2
在本例中,我們建立通道 ch,啟動 goroutine 向通道傳送訊息,然後在主 goroutine 中使用無限迴圈持續接收並列印訊息。
package main
import (
"fmt"
"time"
)
func main() {
go performTask()
time.Sleep(5 * time.Second)
fmt.Println("Main goroutine exited.")
}
func performTask() {
fmt.Println("Performing task...")
time.Sleep(2 * time.Second)
fmt.Println("Task completed.")
}
輸出
Performing task... Task completed. Main goroutine exited.
結論
在本文中,我們探討了如何建立一個 Go 程式,該程式使用通道和 goroutine 來實現併發。透過建立一個字串型別的通道和一個每 2 秒向通道傳送訊息的 goroutine,我們演示了一個 goroutine 之間通訊和同步的基本示例。通道允許在 goroutine 之間安全有效地共享資料,使您能夠在 Go 中構建併發應用程式。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP