当前位置: 首页 > 面试题库 >

为什么此go代码不使用goroutine打印任何内容

侯池暝
2023-03-14
问题内容

我一定缺少关于goroutine的一些基本知识,但是我环顾四周,我看不到任何原因无法解决这个问题。

package main

import "fmt"

func main() {
    for i := 0; i < 20; i++ {
        //fmt.Println(i)
        go func(j int) {
            fmt.Println(j + 100)
        }(i)
    }
}

问题答案:

您的程序在goroutines有机会运行之前已经完成。

这是带有WaitGroup的代码:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 20; i++ {
        wg.Add(1)
        go func(j int) {
            defer wg.Done()
            fmt.Println(j + 100)
        }(i)
    }
    fmt.Println("Waiting...")
    wg.Wait()
    fmt.Println("Done.")
}

https://play.golang.org/p/lmCPU9-qkB



 类似资料:
  • 问题内容: 当我从终端执行该程序时,我编写的程序未打印任何内容,因此我尝试运行以下代码 这是终端,为什么它不打印出来你好。主要功能是否还在运行? 问题答案: Python不会自动调用main()(并且您需要使用sys库来获取argv)。

  • 问题内容: 我有以下代码: 如果我没有在goroutine中从缓冲区读取的代码,它会输出这样的消息,这是我期望发生的事情: 但是,将其放在goroutine中不会打印任何内容。 有人可以解释为什么吗? 问题答案: 函数完成后,您的程序将退出。这很可能在您的goroutine有时间运行并打印其输出之前发生。 一种选择是从通道读取主goroutine块,并在完成工作后将goroutine写入通道。

  • 问题内容: 文本文件中确实包含int和字符串。我可以从文本文件中打印单词,但不能打印数字。 文本文件包括以下内容: Michael 3000 7000 Bilbo 我喜欢2000号吗? 不,我喜欢9000 问题答案: 您的第一个值(“ Michael”) 不是 整数,因此它永远不会进入循环主体。 也许您想更改代码以使其循环播放,直到到达文件末尾,读取并打印整数,但使用(不打印)非整数值。所以像这样

  • 问题内容: 我编写了以下程序: 由于通道事件列表是一个缓冲通道,我想我应该获得100倍的输出“嘿!”,但是它只显示一次。我的错误在哪里? 问题答案: 更新(Go 1.2版或更高版本) 从Go 1.2开始,调度程序基于 抢先式多任务处理 原则。这意味着原始问题(以及下面提供的解决方案)中的问题不再相关。 从Go 1.2发行说明中 调度程序中的抢占 在以前的版本中,永远循环的goroutine可能会使

  • 问题内容: 以下打印语句将打印“ hello world”。有人可以解释吗? 而且是这样的: 问题答案: 当使用特定的种子参数(在这种情况下为或)构造的实例时,它遵循以该种子值 开头 的随机数生成算法。 每个使用相同种子构造的对象每次都会生成相同的数字模式。

  • 问题内容: 我看到了这样的代码: 我认为它有效,因为在第三行中将其分配给了。 但发现bash不能打印任何内容,而我希望它可以打印.. 而且,我发现print什么都没有,而prints 却很混乱。 有人对此有想法吗? 问题答案: 在 运行 前 将其展开,并将结果作为参数传递给。在其环境中不使用的值。 __ 在第一个示例中,使用其环境中的value 分割通过here字符串接收到的字符串。