go - 在 Go 中重复函数调用的 For 循环

标签 go

我循环遍历状态变化,其中变化和条件在函数中定义,并希望编写一个 for 语句,其中我只声明函数调用一次。

此代码有效,但重复 message, flag = a.foo() 感觉很乱。当初始语句与 post 语句相同时,是否有更有效的方法来编写 for 循环?

func (a *Example) foo() (string, bool) {
    // Function affects state of a
    // returns message on each step and flag if condition reached
}

func main() {
    // Step through each state change until flag is triggered
    for message, flag := a.foo(); flag; message, flag = a.foo() {
        fmt.Printf("%s\n", message)
    }
}

我希望有某种等价物可以很好地适合这样的 if 语句:

if message, flag := a.foo(); !flag {
    fmt.Printf("%s\n", message)
}

事实上,我更希望我可以将它更改为 for,但是,唉,预期为“;”。找到'{'

我可能问得太多了,但如果有答案,我很乐意听到。谢谢

最佳答案

据我所知,没有办法完全按照您的意愿去做(尽管如果可能的话我也很乐意)。您可以使用“无限”循环并手动编写中断条件,尽管这也不太好,例如:

func main() {
    for {
        msg, flag := a.foo()
        if flag {
            break
        }
        fmt.Printf(...)
    }
}

关于go - 在 Go 中重复函数调用的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23311300/

相关文章:

go - 检查点是否在矩形中

goroutine race condition 解决方案

go - 将 GoRoutine 绑定(bind)到 CPU 内核

go - 无法再在 golang 中加载包

go - 我应该使用哪种协议(protocol)在多个节点之间交换文件?

html - 将图像从 html 表单传递到 Go

go - 在1页中将相同的模板与不同的参数/变量一起使用

json - 在 Go 中解析时间戳

github - 使用 go get 从本地存储库和私有(private)存储库中检索

go - 如何确保消息平均发送给所有消费者