使用匿名函数

5年以前  |  阅读数:340 次  |  编程语言:Golang 

Go 支持匿名函数,并能用其构造 闭包

匿名函数在你想定义一个不需要命名的内联函数时是很实用的。

package main

import "fmt"

// 这个 `intSeq` 函数返回另一个在 `intSeq` 函数体内定义的
// 匿名函数。这个返回的函数使用闭包的方式 _隐藏_ 变量 `i`。
func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

func main() {

    // 我们调用 `intSeq` 函数,将返回值(一个函数)赋给
    // `nextInt`。这个函数的值包含了自己的值 `i`,这样在每
    // 次调用 `nextInt` 时都会更新 `i` 的值。
    nextInt := intSeq()

    // 通过多次调用 `nextInt` 来看看闭包的效果。
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

    // 为了确认这个状态对于这个特定的函数是唯一的,我们
    // 重新创建并测试一下。
    newInts := intSeq()
    fmt.Println(newInts())
}
 相关文章:
Golang使用定时器
Golang语法基础:在结构体类型中定义方法
Golang语法基础:可变参数
使用errors传递错误信息
Golang使用`math/rand`包生成伪随机数
从字符串中解析数字
使用`strings`包处理字符串
使用printf格式化字符串
定义与使用常量
Golang语法基础:使用协程
Golang处理时间的格式化及其与字符串之间的转换
使用`sort`包排序
Golang使用正则表达式
使用匿名函数
Golang语法基础:利用自动推导定义变量
定义与使用函数
Golang语法基础,使用不同类型的数据
Golang语法基础:使用map
Golang语法基础,使用if
Golang语法基础:内建多返回值支持