码迷,mamicode.com
首页 > 其他好文 > 详细

Go by Example: Closures

时间:2015-01-03 09:28:50      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:go语言   闭包   golang   go   匿名函数   

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

package main

import "fmt"

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

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

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

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

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

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

英文原文


Go by Example: Closures

标签:go语言   闭包   golang   go   匿名函数   

原文地址:http://blog.csdn.net/codemanship/article/details/42343365

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!