https://www.calhoun.io/5-useful-ways-to-use-closures-in-go/
5种有用的闭包
在本文中,我们将探索闭包和匿名函数的几种不同的实际用例,以便您能够更好地理解闭包何时是合适的,并了解它们如何应用于不同的情况。
1.隔离数据
假设您想创建一个函数,该函数可以访问即使在函数退出之后仍然存在的数据。例如,您想要计算函数被调用了多少次,或者您想要创建一个fibonacci数字生成器,但是您不想让任何人访问该数据(这样他们就不会意外地更改它)。您可以使用闭包来实现这一点。
1 package main 2 3 import "fmt" 4 5 func main() { 6 gen := makeFibGen() 7 for i := 0; i < 10; i++ { 8 fmt.Println(gen()) 9 } 10 } 11 12 func makeFibGen() func() int { 13 f1 := 0 14 f2 := 1 15 return func() int { 16 f2, f1 = (f1 + f2), f2 17 return f1 18 } 19 }