在Debian上轻松玩转Go并发编程
用Go做并发编程,其实比大多数人想象的要简单得多——Go语言天生就设计了goroutines和channels这两样利器,让并发不再需要复杂的线程管理。下面通过一个实实在在的小例子,从环境准备到运行结果,一步步带大家走一遍。准备好终端了吗?咱们开始。

第一步,确保你的Debian系统里已经装好了Golang。如果还没装,敲两行命令的事:
sudo apt update
sudo apt install golang-go
装完之后,新建一个文件,比如叫 concurrency.go,然后往里面塞进下面这段代码。别怕,代码不长,每一行我都在后面解释。
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
fmt.Printf("Goroutine %d started\n", id)
time.Sleep(2 * time.Second)
fmt.Printf("Goroutine %d finished\n", id)
}(i)
}
wg.Wait()
fmt.Println("All goroutines finished")
}
这段代码的核心思路很直白:利用 sync.WaitGroup 来监控所有并发任务的完成状态。循环启动5个goroutine,每个goroutine一跑起来就打印“started”,然后睡2秒(模拟耗时的操作),睡醒了再打印“finished”。最后主程序等所有goroutine都完事了,才打印收工信息。这样就能看到并发执行的实际效果——5个任务几乎是同时启动的,2秒后几乎同时结束。
第三步,编译并执行它:
go run concurrency.go
你会在终端里看到类似下面的输出——注意观察打印顺序,没有固定的先后,因为goroutine是并发调度的:
Goroutine 1 started
Goroutine 2 started
Goroutine 3 started
Goroutine 4 started
Goroutine 5 started
Goroutine 1 finished
Goroutine 2 finished
Goroutine 3 finished
Goroutine 4 finished
Goroutine 5 finished
All goroutines finished
这个例子虽然简单,但已经把Go并发编程的骨架搭出来了:goroutine启动任务,WaitGroup等待完成。 实际项目中,你完全可以在这个基础上加上channel做数据传递、用select做多路复用,甚至引入context控制超时。今天先把这个基础跑通,后续再聊更进阶的玩法。
