【问题标题】:Go programming: Is this correct use of channels?Go 编程:这是对通道的正确使用吗?
【发布时间】:2022-11-22 02:39:00
【问题描述】:

我是 Go 和使用频道的新手。此函数产生正确的结果,但我不确定它是否正确执行。它是一个简单的函数,旨在根据给定的汇率计算新的金额和余额。我知道它处理变量有点奇怪,但它们符合练习的规范。

它实际上是在单独的通道中执行计算,还是只是将变量发送到通道,然后在通道外独立执行计算?

func (a *Account) Calc(rate float32) {
    c:=make(chan float32, 2)
    c<-amount
    c<-a.balance
    amount+=s.balance*rate
    a.balance+=a.balance*rate
}

谢谢你的帮助。我已经阅读了几个不同的例子,但我仍然不清楚。

结果符合预期,但由于它可以在不使用任何通道的情况下工作,所以我不确定工作是否真的在通道中完成。

【问题讨论】:

  • 在这里使用 c 频道是完全没有必要的,只会混淆代码。如果那是您发布的完整代码,则没有人会从该频道收到任何人。只需删除那些行。如果您确实需要使用通道,我怀疑存在或应该有另一个实体(可能作为并发 goroutine 运行)应该接收值并执行计算。

标签: go channel channels


【解决方案1】:

该频道在您的示例代码中根本没有做任何事情,所以从这个意义上说,这是不正确的。但它似乎在概念上也有缺陷;为了使并发有效,在通道上发送的每条消息都必须独立且自包含。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多