package main
import (
"fmt"
)
// 模拟传感器数据生成器
func sensorDataGenerator(out chan int) {
for i := 0; i < 10; i++ { // 这里简单模拟生成10个数据
out <- i
}
close(out)
}
// 数据平方计算
func squareCalculator(in chan int, out chan int) {
for num := range in {
out <- num * num
}
close(out)
}
func main() {
dataCh := make(chan int)
squareCh := make(chan int)
go sensorDataGenerator(dataCh)
go squareCalculator(dataCh, squareCh)
for result := range squareCh {
fmt.Println(result)
}
}
确保数据正确传递和处理的说明
- 通道关闭:在
sensorDataGenerator
函数中,数据发送完毕后,使用 close(out)
关闭通道,这会通知接收方没有更多数据。在 squareCalculator
函数中,使用 for num := range in
这种方式可以在通道关闭时自动退出循环,确保不会继续读取无效数据。
- Goroutine 并发:通过
go
关键字启动两个Goroutine,一个用于生成数据,一个用于计算平方。这样可以实现并发处理,提高效率。
- 数据流向:数据从
sensorDataGenerator
生成后,通过 dataCh
通道传递给 squareCalculator
,计算后的平方值通过 squareCh
通道传递到 main
函数中输出,确保了数据的正确流向和处理。