015_go语言中的闭包

Posted 乱七八糟的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了015_go语言中的闭包相关的知识,希望对你有一定的参考价值。

代码演示

package main

import "fmt"

func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

func main() {
    nextInt := intSeq()

    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

    newInts := intSeq()
    fmt.Println(newInts())
}

代码运行结果

1
2
3
1

代码解读:

  • go语言支持匿名函数,可以用来构造闭包
  • 第一段创集了一个intSeq函数,intSeq函数返回另一个在intSeq函数体内定义的匿名函数。这个返回的函数使用闭包的方式隐藏变量i
  • 当调用intSeq函数时,将返回值(一个函数)赋给nextInt。这个函数的值包含了自己的值i,这样在每次调用nextInt时都会更新i的值
  • 闭包这个状态对于特定的函数是唯一的,后面重新创建newInts并测试

以上是关于015_go语言中的闭包的主要内容,如果未能解决你的问题,请参考以下文章

go语言中的闭包

题解PTA团体程序设计天梯赛L1-015 跟奥巴马一起画方块 (15 分) Go语言|Golang

Go语言基础:闭包_defer_recover

Go语言基础:闭包_defer_recover

Golang中的匿名函数(闭包)

Go语言-make陷阱和闭包函数