在Golang中,实现并发的主要方法是使用goroutines和channels。goroutines是轻量级的线程,它们在Go运行时中被调度和管理。channels则用于在goroutines之间传递数据。下面是一个简单的示例,展示了如何在Linux上使用Golang实现并发:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
// 创建一个channel用于传递数据
dataChan := make(chan int)
// 启动一个goroutine,用于发送数据
wg.Add(1)
go func() {
defer wg.Done()
for i := 0; i < 5; i++ {
dataChan <- i
time.Sleep(1 * time.Second)
}
close(dataChan)
}()
// 启动另一个goroutine,用于接收数据
wg.Add(1)
go func() {
defer wg.Done()
for data := range dataChan {
fmt.Println("Received data:", data)
}
}()
// 等待所有goroutines完成
wg.Wait()
fmt.Println("All goroutines finished.")
}
在这个示例中,我们创建了两个goroutines:一个用于发送数据,另一个用于接收数据。我们使用sync.WaitGroup来确保主函数等待所有goroutines完成。数据通过dataChan channel在两个goroutines之间传递。
要运行此程序,请将其保存为main.go,然后在Linux终端中执行以下命令:
go run main.go
程序将每秒输出一次接收到的数据,直到发送完所有数据。