MST

星途 面试题库

面试题:Go中如何使用Channel实现简单的生产者 - 消费者同步

请编写一段Go代码,实现一个简单的生产者 - 消费者模型,生产者向Channel发送整数,消费者从Channel接收整数并打印,要确保生产者和消费者之间的同步。
30.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func producer(ch chan int) {
    for i := 0; i < 10; 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)
    go consumer(ch)

    select {}
}
  1. producer 函数:
    • 此函数负责向通道 ch 发送整数。
    • 使用 for 循环发送 09 这10个整数。
    • 发送完成后,使用 close(ch) 关闭通道,这是Go语言中向接收者表明不再有数据发送的常用方式。
  2. consumer 函数:
    • 使用 for... range 循环从通道 ch 接收数据。
    • for num := range ch 会一直阻塞,直到通道关闭且所有数据都被接收,这种方式可以确保在通道关闭前不会退出循环。
    • 每次接收到数据后,打印出消费的数据。
  3. main 函数:
    • 创建一个整数类型的通道 ch
    • 使用 go 关键字启动生产者和消费者的 goroutine。
    • select {} 语句会永远阻塞,防止 main 函数退出,从而使整个程序持续运行,直到生产者完成数据发送且消费者消费完所有数据。