Skip to content

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通信
  • 生产者消费者模式
  • 工作池模式
  • 超时处理
  • 并发安全
  • 资源竞争处理

学习要点

  1. 轻量级: Goroutine比传统线程更轻量
  2. 通信: 通过channel进行goroutine间通信
  3. 同步: 使用sync包进行同步
  4. 选择: select语句处理多个channel
  5. 安全: 避免资源竞争和死锁

下一步

  • 学习Web开发 (03-web)
  • 学习微服务架构 (04-microservice)
  • 学习性能优化 (05-performance)
  • 学习部署运维 (06-deployment)