go - 当我添加表达式 "fmt.Println()"时发生了什么

标签 go channel

我对 golang 很感兴趣,在探索 channel 期间,我对以下代码感到困惑,所以有人可以告诉我它们之间的区别吗?

当我运行代码时,控制台记录 -5,17 如果我使用评论,我会得到不同的结果 17,-5 我不知道发生了什么......

golang版本是最新的

//comman func
func sum(a []int, c chan int) {
    total := 0
    for _, v := range a {
        total += v
    }
    c <- total  // send total to c
}
func main (){
    a := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)
    go sum(a[:len(a)/2], c)
        //fmt.Println(a[:len(a)/2])
    go sum(a[len(a)/2:], c)
        //fmt.Println(a[len(a)/2:])
    gh,w33 :=  <-c, <-c
    fmt.Println(gh,w33)
}

我期望两次结果是 17,-5 ,但是当注释没有用时,结果是 -5 17

最佳答案

golang 使用调度程序来调度 go routines。 您可以在这里阅读更多相关信息 https://povilasv.me/go-scheduler/ 所以当你运行上面的程序时。不确定 goroutines 是否会按照您编写的顺序执行。

关于go - 当我添加表达式 "fmt.Println()"时发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57707658/

相关文章:

mongodb - 获取 MongoDB 文档 WHERE 状态和日期之间

go - 在 Go 中通过多个 channel 广播一个 channel

google-app-engine - Google App Engine 中 channel 池的最佳方法

python - 读取大型 xml 文件 : go encoding/xml is twice as slow as python lxml

sockets - 套接字无法识别协议(protocol)(套接字泄漏)

go - 需要一点帮助来理解代码流程?我不明白输出中的routine-end 是如何出现在其他输出语句之间的

javascript - appengine channel 没有消息到达

kotlin - 使用 Kotlin Channel 是什么意思?

go - 使用 Golang 的 google 表格中的错误

datetime - Go:获取两个时间之间的差异时出错