我有以下代码:
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有时间运行并打印其输出之前发生。
main()
一种选择是从通道读取主goroutine块,并在完成工作后将goroutine写入通道。