创建字符串类型通道和每 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`。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例 1

在本例中,我们创建通道 ch,启动 goroutine 向通道发送消息,然后在主 goroutine 中使用无限 for 循环持续接收并打印消息。

Open Compiler
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 中使用无限循环持续接收并打印消息。

Open Compiler
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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告