golang channal问题请教

查看:79
本文介绍了golang channal问题请教的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

package main

import (
    "fmt"
)

func main() {
    resultChan := make(chan int)
    for i := 1; i <= 10; i++ {
        go func(resultChan chan int) {
            //收集结果,比如接口调用的返回的结构,存入channal中
            resultChan <- 1
        }(resultChan)
    }

    //存放resultChan中的值
    var res []int

    /*
    for {
        select {
        case tmp := <-resultChan:
            res = append(res, tmp)
        }
    }
    */
    
    //问题? 如何将resultChan中的值全部收集到res变量中???

    fmt.Println(res)
}

解决方案

按我的理解,我写的代码。。

package main

import (
    "fmt"
    "sync"
)

func main() {
    resultChan := make(chan int)
    var wg sync.WaitGroup
    for i := 1; i <= 10; i++ {
        wg.Add(1)
        go func(resultChan chan int) {
            defer wg.Done()
            //收集结果,比如接口调用的返回的结构,存入channal中
            resultChan <- 1
        }(resultChan)
    }

    //存放resultChan中的值
    var res []int

    go func() {
        wg.Wait()
        close(resultChan)
    }()

    for tmp := range resultChan {
        res = append(res, tmp)
    }

    fmt.Println(res)

}

这篇关于golang channal问题请教的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆