在 Linux 中,Golang 提供了强大的并发特性,主要通过 goroutines 和 channels 实现。goroutines 是轻量级的线程,可以在程序中同时运行多个任务。channels 则用于在 goroutines 之间传递数据。
以下是一个简单的示例,展示了如何在 Golang 中使用并发特性:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
// 创建一个带缓冲的 channel,用于存储结果
results := make(chan int, 3)
// 启动 3 个 goroutines
for i := 1; i <= 3; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
// 模拟耗时操作
time.Sleep(time.Duration(id) * time.Second)
// 将结果发送到 channel
results <- id * 2
}(i)
}
// 等待所有 goroutines 完成
wg.Wait()
close(results)
// 从 channel 中读取结果并打印
for result := range results {
fmt.Println("Result:", result)
}
}
在这个示例中,我们首先创建了一个带缓冲的 channel results,用于存储 goroutines 的计算结果。然后,我们启动了 3 个 goroutines,每个 goroutine 负责计算一个值并将其发送到 results channel。最后,我们使用 sync.WaitGroup 等待所有 goroutines 完成,并关闭 results channel。接着,我们从 results channel 中读取结果并打印。
这个示例展示了如何在 Golang 中使用并发特性来同时执行多个任务,并通过 channel 在它们之间传递数据。你可以根据自己的需求调整这个示例,以实现更复杂的并发操作。