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

我对 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()——即使它在大多数情况下都是空的?


qq_遁去的一_1
浏览 114回答 1
1回答

慕的地6264312

根据文档Producer.Events(),它返回一个频道。仅当通道关闭时,对通道的测距才会终止。有关详细信息,请参阅Go 之旅。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go