【发布时间】:2019-05-21 17:26:44
【问题描述】:
Go 中的 for-range 和闭包之间有什么关系吗? 我认为 for-range 可以认为使用闭包。
【问题讨论】:
标签: for-loop go range closures
Go 中的 for-range 和闭包之间有什么关系吗? 我认为 for-range 可以认为使用闭包。
【问题讨论】:
标签: for-loop go range closures
可能的答案可能是具有相同行为的代码。首先,我使用闭包,其次,我使用 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-range 和闭包之间有什么关系吗?
没有。
(唯一要记住的是循环变量在每次迭代中都被重用,一个闭包内部 for 循环将全部关闭同一个变量。参见https://golang.org/doc/faq#closures_and_goroutines)
【讨论】: