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

这个 goroutine 如何持续运行(它是如何工作的)?

这个 goroutine 如何持续运行(它是如何工作的)?

Go
qq_遁去的一_1 2022-06-01 12:31:49
我对 goroutine 的基本理解是它是一种创建线程的简化方法。查看confluent-kafka-go库,以以下代码为例:    go func() {        for e := range p.Events() {            switch ev := e.(type) {            case *kafka.Message:                if ev.TopicPartition.Error != nil {                    fmt.Printf("Delivery failed: %v\n", ev.TopicPartition)                } else {                    fmt.Printf("Delivered message to %v\n", ev.TopicPartition)                }            }        }    }()    // Produce messages to topic (asynchronously)    topic := "myTopic"    for _, word := range []string{"Welcome", "to", "the", "Confluent", "Kafka", "Golang", "client"} {        p.Produce(&kafka.Message{            TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},            Value:          []byte(word),        }, nil)    }这是如何工作的?它会不会只运行一次并在遍历所有内容后停止工作p.Events()?如何go知道不中止 goroutine 而是继续轮询p.Events()——即使它在大多数情况下都是空的?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

根据文档Producer.Events(),它返回一个频道。

仅当通道关闭时,对通道的测距才会终止。有关详细信息,请参阅Go 之旅。


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

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