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

为什么goroutine中的fmt.Println不打印行?

东明德
2023-03-14
问题内容

我有以下代码:

package main

import "net"
import "fmt"
import "bufio"

func main() {
    conn, _ := net.Dial("tcp", "irc.freenode.net:6667")

    reader := bufio.NewReader(conn)
    go func() {
        str, err := reader.ReadString('\n')
        if err != nil {
            // handle it
            fmt.Println(err)
        }
        fmt.Println(str)
    }()

}

如果我没有在goroutine中从缓冲区读取的代码,它会输出这样的消息,这是我期望发生的事情:

:zelazny.freenode.net NOTICE * :*** Looking up your hostname...

但是,将其放在goroutine中不会打印任何内容。

有人可以解释为什么吗?


问题答案:

main()函数完成后,您的程序将退出。这很可能在您的goroutine有时间运行并打印其输出之前发生。

一种选择是从通道读取主goroutine块,并在完成工作后将goroutine写入通道。



 类似资料:
  • 问题内容: 我一定缺少关于goroutine的一些基本知识,但是我环顾四周,我看不到任何原因无法解决这个问题。 问题答案: 您的程序在goroutines有机会运行之前已经完成。 这是带有WaitGroup的代码: https://play.golang.org/p/lmCPU9-qkB

  • 问题内容: 我正在学习Go,并且想尝试goroutine和频道。 这是我的代码: 结果如下: 我不明白为什么我的goroutine永远不会执行。没有输入“进入goroutine”,并且没有任何错误消息。 问题答案: 事实是您的goroutine开始执行,但是在执行任何操作之前就结束了,因为您的程序在打印后立即停止:goroutine的执行与主程序无关,但是将在与程序相同的位置处停止。因此,基本上,

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。

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

  • 问题内容: 我不明白为什么编译器从字典中打印值会有所不同?我使用的是Swift 3,Xcode8。这是错误还是优化内容的怪异方法? 编辑 更奇怪的是: 有些价值观过去了,有些则跌破了,有些则保持不变!1.1小于1.1000000000000001,而2.3大于2.2999999999999998,1.2仅为1.2 问题答案: 如注释中已经提到的,a 不能精确存储值。Swift根据IEEE 754

  • 我已经把一些代码放在一起,对人们的考试成绩进行排序,这样他们就可以看到他们的最高成绩是什么,以及他们什么时候达到的。我创建了以下代码,但它没有显示1、2、3等计数器,我缺少什么? 它打印以下内容,所有内容都显示1,而它应该是1、2、3等。