Golang 协程(goroutine)与通道(channel)
package main
import (
"fmt"
"time"
)
func printNumbers(numbers chan int) {
for num := range numbers {
fmt.Print(num, " ")
}
fmt.Println("打印完毕")
}
func printLetters(letters chan string) {
for {
time.Sleep(100 * time.Millisecond)
letters <- "O"
}
}
func main() {
numbers := make(chan int)
letters := make(chan string)
// 启动打印数字的协程
go printNumbers(numbers)
// 启动定时发送字母O的协程
go printLetters(letters)
// 模拟发送数据到channels
for i := 0; i < 10; i++ {
numbers <- i
<-letters // 接收字母以避免阻塞
}
close(numbers) // 关闭numbers通道,通知printNumbers函数结束循环
// 等待协程执行完成
time.Sleep(1000 * time.Millisecond)
}
这段代码创建了两个协程,分别用于打印数字和定时发送字母O。主函数模拟发送数据到通道,并在最后关闭通道通知打印完成。通过这个例子,开发者可以学习到Golang中协程和通道的使用方法。
评论已关闭