建立字串型別通道和每 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 中構建併發應用程式。

更新於: 2023 年 7 月 20 日

200 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.