说到Go语言的并发编程,核心就两个关键字:goroutine 和 channel。goroutine 是轻量级线程,让你能同时跑多个任务;channel 呢,就是这些任务之间传递数据的同步管道。这两个东西配合好了,并发写起来相当顺手。

下面咱们就用 Debian 环境,跑一个最简单的并发示例,看看实际怎么操作。
首先,确保系统里已经装了 Go。没装的话,终端里敲两行命令就搞定:
sudo apt-get update
sudo apt-get install golang-go
接着,新建一个文件,比如 main.go,把下面这段代码贴进去:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("Goroutine %d 开始执行\n", i)
time.Sleep(1 * time.Second)
fmt.Printf("Goroutine %d 执行完毕\n", i)
}(i)
}
wg.Wait()
fmt.Println("所有 Goroutine 执行完毕")
}
这个例子用 sync.WaitGroup 来等所有 goroutine 跑完。一共启动了 5 个 goroutine,每个会先打印一条开始消息,睡 1 秒,再打印结束消息。注意看,它们几乎是同时开始的,但结束时间因为 sleep 错开了。
保存文件后,运行:
go run main.go
输出大概长这样:
Goroutine 0 开始执行
Goroutine 1 开始执行
Goroutine 2 开始执行
Goroutine 3 开始执行
Goroutine 4 开始执行
Goroutine 0 执行完毕
Goroutine 1 执行完毕
Goroutine 2 执行完毕
Goroutine 3 执行完毕
Goroutine 4 执行完毕
所有 Goroutine 执行完毕
这个 demo 虽然简单,但把 goroutine 的启动、同步、生命周期都走了一遍。实际项目里,你可以根据需求换更复杂的逻辑——比如用 channel 传数据,或者配合 select 做超时控制。并发这块,Go 的语法糖真的让开发省心不少。
