猿问

为什么 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 中不会打印任何内容。


有人可以解释为什么会这样吗?


神不在的星期二
浏览 471回答 3
3回答

慕妹3146593

当main()函数完成时,您的程序将退出。这很可能发生在您的 goroutine 有时间运行并打印其输出之前。一种选择是让主 goroutine 块从通道读取,并在完成工作后让 goroutine 写入通道。
随时随地看视频慕课网APP

相关分类

Go
我要回答