Go并发编程示例
概述
本文档展示了Go语言的并发编程特性,包括goroutine、channel、select、sync包等。
运行示例
bash
cd apps/go/examples/02-concurrency
go run main.go
核心概念
1. Goroutine
Goroutine是Go语言的轻量级线程,由Go运行时管理。
go
// 启动一个goroutine
go func() {
fmt.Println("这是一个goroutine")
}()
// 带参数的goroutine
go func(name string) {
fmt.Printf("Hello, %s\n", name)
}("World")
2. Channel
Channel是Go语言中goroutine之间通信的管道。
go
// 创建channel
ch := make(chan int)
// 发送数据到channel
ch <- 42
// 从channel接收数据
value := <-ch
// 带缓冲的channel
bufferedCh := make(chan int, 10)
3. Select语句
Select语句用于在多个channel操作中进行选择。
go
select {
case msg1 := <-ch1:
fmt.Println("收到来自ch1的消息:", msg1)
case msg2 := <-ch2:
fmt.Println("收到来自ch2的消息:", msg2)
case ch3 <- value:
fmt.Println("发送到ch3:", value)
default:
fmt.Println("没有channel准备好")
}
4. Sync包
Sync包提供了同步原语。
go
import "sync"
var wg sync.WaitGroup
var mu sync.Mutex
var once sync.Once
示例代码
详细示例请查看 main.go
文件,包含:
- 基本的goroutine使用
- channel通信
- 生产者消费者模式
- 工作池模式
- 超时处理
- 并发安全
- 资源竞争处理
学习要点
- 轻量级: Goroutine比传统线程更轻量
- 通信: 通过channel进行goroutine间通信
- 同步: 使用sync包进行同步
- 选择: select语句处理多个channel
- 安全: 避免资源竞争和死锁
下一步
- 学习Web开发 (03-web)
- 学习微服务架构 (04-microservice)
- 学习性能优化 (05-performance)
- 学习部署运维 (06-deployment)