MST

星途 面试题库

面试题:Go中Goroutine与通道在实时数据处理的基础应用

假设你要处理一个实时的传感器数据流,每个数据是一个整数。请用Go语言实现一个简单的程序,使用Goroutine从一个模拟的传感器数据生成器中读取数据,并通过通道传递给另一个Goroutine进行数据的平方计算,最后输出结果。请写出关键代码片段,并简要说明如何确保数据的正确传递和处理。
12.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
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)
    }
}

确保数据正确传递和处理的说明

  1. 通道关闭:在 sensorDataGenerator 函数中,数据发送完毕后,使用 close(out) 关闭通道,这会通知接收方没有更多数据。在 squareCalculator 函数中,使用 for num := range in 这种方式可以在通道关闭时自动退出循环,确保不会继续读取无效数据。
  2. Goroutine 并发:通过 go 关键字启动两个Goroutine,一个用于生成数据,一个用于计算平方。这样可以实现并发处理,提高效率。
  3. 数据流向:数据从 sensorDataGenerator 生成后,通过 dataCh 通道传递给 squareCalculator,计算后的平方值通过 squareCh 通道传递到 main 函数中输出,确保了数据的正确流向和处理。