我有以下代码:

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...

但是,将其放在大猩猩内部不会打印任何内容.

有人能解释一下原因吗?

推荐答案

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

一种 Select 是让主要的大猩猩挡路从通道中读取数据,并在大猩猩完成其工作后将其写入通道.

Go相关问答推荐

如何预编译Golang标准库?

在不耗尽资源的情况下处理S3文件下载

理解Golang中的IOTA和常量

什么东西逃到了堆里?

Go 中的sync.Cond 与 Wait 方法

生成一个 CSV/Excel,在 Golang 中该列的下拉选项中指定值

「GORM错误」不支持的数据类型:&[],不正确的模式

如何从Go项目连接Microsoft Access数据库?

在 Go sync.Map 中,为什么这部分实现不一致或者我误解了什么?

下载和合并时输出文件已损坏

Gremlin-Go:树步骤不可序列化

Go Colly 如何找到请求的元素?

CORS grpc 网关 GoLang

我相信我正确地在 sRGB 和线性 RGB 之间进行了转换,那么为什么深色的结果看起来更糟呢?

Golang prometheus 显示自定义指标

Go GCP 同时模拟两个服务帐户

httprouterhttp.HandlerFunc() 是如何工作的?

具有多个嵌入式 struct 的 Go MarshalJSON 行为

如何在测试中传递用户名和密码等参数

Golang LinkedList 删除第一个元素