2 回答
TA贡献1824条经验 获得超6个赞
例如,
package main
import "fmt"
func foo(n int) func() (int, bool) {
i := -1
return func() (int, bool) {
if i >= n {
return 0, true
}
i++
return i, false
}
}
func main() {
f := foo(5)
for i, eof := f(); !eof; i, eof = f() {
fmt.Println(i)
}
}
输出:
0
1
2
3
4
5
TA贡献1995条经验 获得超2个赞
你不能单独迭代一个函数。一个函数只返回一次,所以你的 for 循环永远不会循环。如果你想返回一个闭包i,你可以在每次调用时增加它,但你仍然需要一种方法来知道什么时候停止,你可以通过从内部函数返回多个值来实现。
Go 还使用沟通渠道,您可以range通过这些渠道进行沟通。
func foo() chan string {
ch := make(chan string)
go func() {
for i := 0; i < 10; i++ {
ch <- strconv.Itoa(i)
}
close(ch)
}()
return ch
}
func main() {
for i := range foo() {
fmt.Println(i)
}
}
http://play.golang.org/p/oiFTAgyeJd
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报