dougao2830 2019-01-31 07:22
浏览 56

为什么在go例程中将值分配给变量后,变量将为空?

I'm using go routines to do fast execution. I'm making a sample program for practice but I'm wondered when I see that the value of the variable empty after assigning in the go routines. I'm showing my code:-

package main

import (
    "fmt"
)

func main() {
    var collectInt []int
    doneChan := make(chan string)
    go func() {
        for i := 0; i < 10; i++ {
            collectInt = append(collectInt, i)
        }

    }()
    fmt.Println(collectInt)
    go func() {
        doneChan <- "done"
    }()
    <-doneChan
}

Play link https://play.golang.org/p/VgwrzR8GBzN

Please tell me that how I will assign the value to the variable while using go routines.

  • 写回答

2条回答 默认 最新

  • dongyue110702 2019-01-31 07:32
    关注

    The rule is not to share data with shared variables but to pass the data between go routines with channels.

    See Go proverbs

    Don't communicate by sharing memory, share memory by communicating.

    Either make a collectInt a channel and pass each int separately:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        collectInt := make(chan int)
        go func() {
            for i := 0; i < 10; i++ {
                collectInt <- i
            }
            close(collectInt)
        }()
        for i := range collectInt {
            fmt.Println(i)
        }
    }
    

    Or pass the whole set of data with a channel:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        collectInt := make(chan []int)
        go func() {
            var ints []int
            for i := 0; i < 10; i++ {
                ints = append(ints, i)
            }
            collectInt <- ints
        }()
        fmt.Println(<-collectInt)
    }
    

    The doneChan has no use in this case.

    评论

报告相同问题?

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本