MST
星途 面试题库

面试题:Go中通道在生产者 - 消费者模型中的应用

请描述在Go语言中如何使用通道构建一个简单的生产者 - 消费者模型。生产者持续生成整数,消费者从通道中取出整数并打印,且要处理好通道关闭等情况,给出具体的代码示例。
43.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func producer(ch chan<- int) {
    for i := 0; ; i++ {
        ch <- i
    }
    close(ch)
}

func consumer(ch <-chan int) {
    for num := range ch {
        fmt.Println("Consumed:", num)
    }
}

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}
  1. 生产者函数 producer
    • 该函数接受一个只写通道 ch
    • 使用无限循环 for i := 0; ; i++ 持续生成整数 i 并发送到通道 ch 中。
    • 理论上,这里无限循环会一直运行,不过在实际情况中如果有其他逻辑来停止循环,循环结束后会调用 close(ch) 关闭通道。
  2. 消费者函数 consumer
    • 该函数接受一个只读通道 ch
    • 使用 for num := range ch 从通道 ch 中接收数据,当通道关闭且所有数据都被接收完后,这个循环会自动结束。每接收到一个数据 num,就打印出来。
  3. main 函数
    • 创建一个无缓冲通道 ch
    • 使用 go 关键字启动一个协程来运行 producer 函数。
    • 调用 consumer 函数来消费数据。