通道(channel)是Go语言中用于在不同goroutine之间进行通信的数据结构。通道提供了一种安全的方式来传递数据,确保发送和接收操作的同步和顺序。
以下是一个简单的示例,演示了如何使用通道进行并发控制:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
// 模拟耗时操作
time.Sleep(time.Second)
// 向通道发送消息
ch <- fmt.Sprintf("Worker %d done", id)
}
func main() {
// 创建一个字符串类型的通道
ch := make(chan string)
// 启动多个goroutine
for i := 1; i <= 3; i++ {
go worker(i, ch)
}
// 等待所有goroutine完成,并接收结果
for i := 1; i <= 3; i++ {
result := <-ch // 从通道接收消息
fmt.Println(result)
}
}
在这个示例中:
-
worker
函数模拟了一个耗时的任务,并向通道发送完成消息。 -
在
main
函数中,首先创建了一个字符串类型的通道ch
,用于接收来自goroutine的消息。 -
启动了3个goroutine,并发执行
worker
函数,每个goroutine完成任务后都会向通道发送完成消息。 -
在主goroutine中使用
for
循环从通道中接收消息,并打印输出。
通过使用通道,我们可以实现不同goroutine之间的安全通信和数据传递,从而实现并发控制。