在 go 中使用匿名函数创建生成器的方法:定义一个带有管道参数的匿名函数。在匿名函数内启动一个协程。在协程中使用循环不断向管道发送值。返回管道作为生成器的输出。
如何在 Go 中使用匿名函数创建生成器?
生成器是一种特殊的函数,它返回一个通道,可以不断地从中获取值。这在需要生成大量数据但又不想将所有数据都存储在内存中的情况下非常有用。
在 Go 中,可以使用匿名函数创建生成器。以下是如何操作:
func generator(n int) <-chan int {
c := make(chan int)
go func() {
for i := 0; i < n; i++ {
c <- i
}
close(c)
}()
return c
}
在这个示例中,generator 函数接收一个整数 n 作为参数并返回一个只读通道。生成器函数启动一个单独的协程,该协程循环生成值并将其发送到通道。
立即学习“go语言免费学习笔记(深入)”;
实战案例
考虑一个生成 10 个随机数的生成器:
func randomGenerator(n int) <-chan int {
c := make(chan int)
go func() {
for i := 0; i < n; i++ {
c <- rand.Int()
}
close(c)
}()
return c
}
func main() {
g := randomGenerator(10)
for v := range g {
fmt.Println(v)
}
}
在这个示例中,我们使用 rand.Int() 函数生成随机数。生成器启动后,main 函数循环从通道读取值,直到通道关闭。
使用匿名函数创建的生成器在创建需要生成大量数据的应用程序时非常有用。它们可以帮助管理内存并防止应用程序崩溃。