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

这个goroutine是如何连续运行的(它是如何工作的)?,go,kafka-producer-api,goroutine,librdkafka,Go,Kafka Producer Api,Goroutine,Librdkafka,我对goroutine的基本理解是,它是创建线程的一种简化方法 查看库,下面给出了以下代码作为示例: go func() { for e := range p.Events() { switch ev := e.(type) { case *kafka.Message: if ev.TopicPartition.Error != nil { fmt.Pr

我对goroutine的基本理解是,它是创建线程的一种简化方法

查看库,下面给出了以下代码作为示例:

    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()
——即使它在大多数时间都是空的?

根据,它返回一个通道


通道上的测距仅在通道关闭时终止。有关更多详细信息,请参阅。

“它是否只运行一次,并在循环通过所有p.Events()后停止工作?”这正是发生的情况:一旦p.Events()关闭,for循环将终止。“go如何知道不中止goroutine而继续轮询p.Events()-即使它在大多数时间都是空的?”请通过ff(或者更好地完成整个巡演)。