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

是否可以使用for循环在golang中迭代返回的函数?,go,Go,假设我们有: func foo() func() int { return func() { for i := range [0..10] { return i } } } func main() { for i := foo() { } } 我可以在for循环中迭代返回的函数而不知道它将循环多少次吗?不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果希望在i上返回闭包,可以在每次调用时

假设我们有:

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

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

    }
}

我可以在for循环中迭代返回的函数而不知道它将循环多少次吗?

不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果希望在
i
上返回闭包,可以在每次调用时递增闭包,但仍然需要知道何时停止,这可以通过从内部函数返回多个值来实现

Go还使用通道进行通信,您可以通过这些通道进行
range
over

func foo() chan string {
    ch := make(chan string)
    go func() {
        for i := 0; i < 10; i++ {
            ch <- strconv.Itoa(i)
        }
        close(ch)
    }()
    return ch
}

func main() {
    for i := range foo() {
        fmt.Println(i)
    }
}
func foo()chan字符串{
ch:=制造(成串)
go func(){
对于i:=0;i<10;i++{

ch不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果要在
i
上返回闭包,可以在每次调用时递增闭包,但仍然需要知道何时停止,这可以通过从内部函数返回多个值来实现

Go还使用通道进行通信,您可以通过这些通道进行
range
over

func foo() chan string {
    ch := make(chan string)
    go func() {
        for i := 0; i < 10; i++ {
            ch <- strconv.Itoa(i)
        }
        close(ch)
    }()
    return ch
}

func main() {
    for i := range foo() {
        fmt.Println(i)
    }
}
func foo()chan字符串{
ch:=制造(成串)
go func(){
对于i:=0;i<10;i++{
例如,ch

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)
    }
}
输出:

0
1
2
3
4
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)
    }
}
输出:

0
1
2
3
4
5

首先,您试图返回一个函数,该函数在for循环中返回一个数字(应该只返回一次),但它没有返回类型。最重要的是,主函数返回类型是字符串。因此存在许多不一致。如果您使问题的非相关部分有效,而不是编造语法并要求我们对其进行解密,这将非常有帮助。首先,您尝试返回一个返回数字的函数在for循环中(应该只返回一次),但它没有返回类型。最重要的是,主函数返回类型是字符串。因此存在很多不一致之处。如果您使问题的非相关部分有效,而不是编造语法并要求我们解译它,这将非常有帮助。我一直缺少“第二次”调用
f()
define在
定义的第三部分。感谢@peterSOI错过了对
f()
定义的
定义的第三部分的“第二次”调用。感谢@peterSO