这个goroutine是如何连续运行的(它是如何工作的)?
我对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
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(或者更好地完成整个巡演)。