为什么 goroutine 中的 fmt.Println 不打印一行?
技术问答
246 人阅读
|
0 人回复
|
2023-09-12
|
我有以下代码:
- |' I) ~# w6 _( E- k3 \6 p9 F( u$ K$ S5 t
- 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...
$ n% ^: T& ]: \ 但是,把它放在 goroutine 不会打印任何内容。1 v& }5 k" _- B- O4 c
有人能解释为什么会这样吗?, f& |9 k4 N' a: |7 u0 Q5 M- V
' q" u- Y4 f% u" P5 t& Z, v
解决方案:
' r' A) }" O! K" h- A 当main()函数完成后,您的程序将退出。这很可能发生在你的 goroutine 在有时间运行并打印其输出之前。3 w, y7 ^! ]" O' U5 }
让主 是一种选择goroutine 块从通道读取,并在完成工作后让 goroutine 写入通道。 |
|
|
|
|
|