嗨,有人可以帮我解释一下 Golang 中的这个通道代码吗

问题描述 投票:0回答:1
import "fmt"

func main() {
    cnp := make(chan func(), 10)
    for i := 0; i < 4; i++ {
        go func() {
            for f := range cnp {
                f()
            }
        }()
    }
    cnp <- func() {
        fmt.Println("Here")
    }
    fmt.Println("Here1")
}

我有几个问题我想不出答案

  1. 频道中的功能如何运作?这是某种递归吗?
  2. 运行4次for循环有什么意义
  3. 为什么“这里”没有被打印出来?

浏览文档和 YouTube 频道

go concurrency channel
1个回答
0
投票

如果您尝试使用工作模式,也许您应该利用

WaitGroup

import (
    "fmt"
    "sync"
)

func main() {
    // receive channel
    cnp := make(chan func(), 10)

    workerCount := 4
    var wg sync.WaitGroup
    wg.Add(workerCount)

    for i := 0; i < 4; i++ {
        go func() {
            defer wg.Done()
            for f := range cnp {
                f()
            }
        }()
    }
    
    // produce values
    cnp <- func() {
        fmt.Println("Here")
    }
    // once done, close channel to stop goroutines
    close(cnp)

    // Wait for all goroutines to finish
    wg.Wait()
    fmt.Println("Here1")
}

© www.soinside.com 2019 - 2024. All rights reserved.