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

我有以下代码:

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中的fmt.Println不打印行? 的全部内容, 来源链接: utcz.com/qa/431044.html

回到顶部