Go by Example: Closures

前端之家收集整理的这篇文章主要介绍了Go by Example: Closures前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Go语言支持匿名函数。匿名函数可以组成函数闭包。当你想定义一个不需要命名的内联函数时,匿名函数是非常有用的。

package main

import "fmt"

// 这个"intSeq"函数返回另外一个在intSeq内部定义的匿名函数,
// 这个返回的匿名函数包住了变量i,从而形成了一个闭包
func intSeq() func() int {
    i := 0
    return func() int {
        i += 1
        return i
    }
}

func main() {
    // 我们调用intSeq函数,并且把结果(函数)赋值给一个函数nextInt,
    // 这个nextInt函数拥有自己的i变量,这个变量每次调用都被更新。
    // 这里i的初始值是由intSeq调用的时候决定的。
    nextInt := intSeq()

    // 调用几次nextInt,看看闭包的效果
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

    // 为了确认闭包的状态是独立于intSeq函数的,再创建一个。
    newInts := intSeq()
    fmt.Println(newInts())
}
输出
$ go run closures.go
1
2
3
1

下一个章节,我们将学习函数的最后一个特性:递归。

下一个例子:Go by Example:Recursion。

英文原文

猜你在找的Go相关文章