GO Channel使用详解(各种场景下的最佳实践)
package main
import (
"fmt"
"time"
)
func main() {
// 使用无缓冲的通道进行同步
done := make(chan bool)
go func() {
fmt.Println("子 goroutine 正在运行...")
time.Sleep(2 * time.Second) // 模拟工作
fmt.Println("子 goroutine 完成工作,准备通知主 goroutine。")
done <- true // 发送信号表示完成
}()
fmt.Println("正在等待子 goroutine 完成任务...")
<-done // 阻塞等待通知
fmt.Println("收到通知,子 goroutine 已完成任务。")
}
这段代码创建了一个无缓冲的通道done
,用于同步两个goroutine。子goroutine完成任务后,向done
通道发送一个值,主goroutine则阻塞等待这个值的到来。这是一个经典的使用场景,展示了如何通过通道同步不同的goroutine。
评论已关闭