回答

收藏

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

技术问答 技术问答 290 人阅读 | 0 人回复 | 2023-09-12

我有以下代码:
# \3 \: g4 B. `% b

    # ^! W  R: N3 T7 u4 B+ U
  • 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)  code]假如我没有从 goroutine 缓冲区读取的代码会输出这样的消息,这就是我所期望的:[code]:zelazny.freenode.net NOTICE * :*** Looking up your hostname..., T0 ^$ W9 C4 V( w
但是,把它放在 goroutine 不会打印任何内容。
* W, ]8 L# ~) P$ `# t+ B" }# I有人能解释为什么会这样吗?
- P8 c4 m3 m3 _# L9 L                                                               
# P  R, q8 P1 Y+ P6 H; f    解决方案:                                                                - V' s& z7 x  |: M) x4 Y
                                                                当main()函数完成后,您的程序将退出。这很可能发生在你的 goroutine 在有时间运行并打印其输出之前。7 W& C. H/ C3 O8 z8 z; {7 o6 s& g" i
让主 是一种选择goroutine 块从通道读取,并在完成工作后让 goroutine 写入通道。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则