为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
神不在的星期二 2021-06-04 18:33:21
我有以下代码:package mainimport "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 中不会打印任何内容。有人可以解释为什么会这样吗?
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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

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


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 470 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信