创建字符串类型通道和每 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告