go 闭包,用来替换全局变量

    一个函数,需要用到一个多个全局变量。
    但不想声明一个全局变量,因为这个变量只有这个函数使用。

    在 C++ 中,可以用 static 来干。

    在 go 中,可以用闭包来干。

    1. package main
    2. import "fmt"
    3. // 使用全局变量 begin
    4. var i = 0
    5. func addone() int {
    6. i++
    7. return i
    8. }
    9. // 使用全局变量 end
    10. // 使用闭包 begin
    11. func addoneClosure() func() int {
    12. j := 0
    13. return func() int {
    14. j++
    15. return j
    16. }
    17. }
    18. // 使用闭包 end
    19. func main() {
    20. fmt.Println(addone(), addone(), addone())
    21. f := addoneClosure()
    22. fmt.Println(f(), f(), f())
    23. }