是否可以使用 for 循环迭代 golang 中返回的函数?

Flu*_*ffy 1 go

说我们有这个:

func foo() func() int {
    return func() {
        for i := range [0..10] {
            return i
        }
    }
}

func main() {
    for i := foo() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在不知道循环多少次的情况下在 for 循环中迭代返回的函数吗?

pet*_*rSO 5

例如,

package main

import "fmt"

func foo(n int) func() (int, bool) {
    i := -1
    return func() (int, bool) {
        if i >= n {
            return 0, true
        }
        i++
        return i, false
    }
}

func main() {
    f := foo(5)
    for i, eof := f(); !eof; i, eof = f() {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)