Go中的for-range和闭包之间是否有任何关系? 我认为范围可以认为是使用闭包。
答案 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
}
}