Go 中 实现基于 channel 实现单生产者多消费者模型?(生产者生产 1~100, 5个消费者同时消费)

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。
package main

import (
    "fmt"
    "sync"
)

// 生产者
func producer(ch chan<- int, wg *sync.WaitGroup) {
    defer wg.Done()

    for i := 1; i <= 100; i++ {
        ch <- i // 将数据发送到 channel 中
    }

    // 以便消费者可以在读取完所有数据后停止阻塞并退出
    close(ch) // 关闭 channel
}

// 消费者
func consumer(ch <-chan int, wg *sync.WaitGroup, id int) {
    defer wg.Done()

    // 从 channel 中读取数据,直到 channel 关闭
    for data := range ch {
        fmt.Printf("consumer %d got data: %d\n", id, data)
    }
}

func main() {
    // 创建一个 channel
    ch := make(chan int)

    var wg sync.WaitGroup
    wg.Add(6)

    go producer(ch, &wg) // 启动生产者 goroutine

    // 启动5个消费者 goroutine
    go consumer(ch, &wg, 1)
    go consumer(ch, &wg, 2)
    go consumer(ch, &wg, 3)
    go consumer(ch, &wg, 4)
    go consumer(ch, &wg, 5)

    // 使用 sync.WaitGroup 等待所有 goroutine 执行完毕
    wg.Wait() // 等待所有 goroutine 结束
}
明天我们吃什么 悲哀藏在现实中 Tacks
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!