For loop for range构造与Go中的闭包有什么关系?

For loop for range构造与Go中的闭包有什么关系?,for-loop,go,range,closures,For Loop,Go,Range,Closures,Go中的for范围和闭包之间有关系吗? 我认为for range可以被视为使用闭包。一个可能的答案可能是这段代码具有相同的行为。首先,我使用闭包,其次,我使用范围循环 package main import "fmt" func main() { names := [4]string{"John", "Marie", "David", "Alex"} iter := generator(names) for true { i, v := iter(

Go中的for范围和闭包之间有关系吗?
我认为for range可以被视为使用闭包。

一个可能的答案可能是这段代码具有相同的行为。首先,我使用闭包,其次,我使用范围循环

package main

import "fmt"

func main() {

    names := [4]string{"John", "Marie", "David", "Alex"}

    iter := generator(names)
    for true {
        i, v := iter()
        fmt.Printf("%v %s\n", i, v)

        if i == 3 {
            break
        }
    }

    fmt.Println("---------------------------------")

    for i, v := range names {
        fmt.Printf("%v %s\n", i, v)
    }
}

func generator(arr [4]string) func() (int, string) {

    index := 0

    return func() (int, string) {

        nextName := arr[index]
        index++
        return index - 1, nextName
    }
}
Go中的for范围和闭包之间有关系吗

没有

唯一需要记住的是循环变量在每次迭代中都会被重用,for循环中的闭包都会在同一个变量上关闭。看