【问题标题】:How does for-range construct relate to closures in Go? [closed]for-range 结构与 Go 中的闭包有何关系? [关闭]
【发布时间】:2019-05-21 17:26:44
【问题描述】:

Go 中的 for-range 和闭包之间有什么关系吗? 我认为 for-range 可以认为使用闭包。

【问题讨论】:

    标签: for-loop go range closures


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Go 中的 for-range 和闭包之间有什么关系吗?

      没有。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-06
        • 2021-03-10
        • 2011-11-17
        • 1970-01-01
        • 2021-09-07
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多