范围构造与Go中的闭包有何关系?

时间:2018-12-21 08:27:22

标签: for-loop go range closures

Go中的for-range和闭包之间是否有任何关系? 我认为范围可以认为是使用闭包。

2 个答案:

答案 0 :(得分:4)

  

在Go中,for-range和闭包之间是否有任何关系?

否。

(唯一要记住的是,循环变量将在每次迭代中重用,闭包内部 for循环将全部关闭同一个变量。请参见https://golang.org/doc/faq#closures_and_goroutines

答案 1 :(得分:-3)

可能的答案可能是该代码具有相同的行为。首先,我使用一个闭包,其次,我使用一个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
    }
}