导航菜单

Go语言/并发编程
课程进度 40% · 第10/23章10/23章 · 标签 1/4
1

Goroutine基础

Goroutine是Go语言的轻量级线程,使用go关键字启动。

go
1
// 启动一个goroutine
2
func sayHello() {
3
fmt.Println("Hello from goroutine")
4
}
5
go sayHello()
6
 
7
// 主协程等待
8
fmt.Println("main end")
9
// 实际开发中常用sync.WaitGroup等待所有goroutine结束
  • Goroutine非常轻量,数万个也不会崩溃
  • 主协程退出会导致所有goroutine退出
goroutinego关键字并发轻量级
2

Channel通信

Channel用于Goroutine间通信,保证数据安全传递。

go
1
// 创建channel
2
ch := make(chan int)
3
 
4
// 发送和接收
5
ch <- 10 // 发送数据
6
x := <-ch // 接收数据
7
 
8
// 启动goroutine并通信
9
func worker(ch chan int) {
10
data := <-ch
11
fmt.Println("worker收到:", data)
12
}
13
go worker(ch)
14
ch <- 42
15
 
16
// 关闭channel
17
close(ch)
  • channel类型:无缓冲、有缓冲
  • 关闭channel用close,接收端可检测