gpt4 book ai didi

go - 关于 channel in go 的一些问题

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:44 25 4
gpt4 key购买 nike

1-让chan break的条件是什么?

deliveries <-chan amqp.Delivery
for d:= range deliveries{
..
}

如果大约几分钟后 chan deliveries 中没有更多数据,它就会中断。 上面的代码和下面的一样吗?

deliveries <- chan amqp.Delivery
for{
d,ok:=<-deliveries
if !ok{
break
}
//code
}

2-为什么chan不仅返回数据还返回状态?“ok”是什么意思?

3-chan是怎么实现“ok”的是client的状态,为什么能返回“ok”?

最佳答案

我会先回答问题 2 和 3,因为答案为我回答问题 1 提供了背景。

2, 3) 内置函数 close(c)记录没有更多的值将被发送到 channel c。

receive 中的第二个结果expression 是一个 bool 值,指示操作是否成功。如果收到发送的值,则第二个结果为真;如果因为 channel 关闭而收到零值,则第二个结果为假。

1) channel 上的范围接收 channel 上发送的值,直到 channel 关闭。

以下循环非常相似。在 channel 关闭之前,它们都接收值。

for v := range c {
// code
}

for {
v, ok := <-c
if != ok {
break
}
// code
}

这些循环之间的主要区别在于变量 v 的范围。 v 的范围在第一个循环之外和第二个循环之内。如果您 use a closure and goroutine in the loop,这种区别很重要.

关于go - 关于 channel in go 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26296303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com