zoukankan      html  css  js  c++  java
  • GO语言理解闭包

    什么是闭包?

      闭包是指能够读取函数内部变量的函数,一般来说只有函数内部的子函数才能读取该函数的局部变量,GO语言就是这种方式。

      GO语言支持匿名函数,可作为闭包。

    如下是菜鸟教程上的一个例子;

    package main

    import "fmt"

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

    func main(){
       /* nextNumber 为一个函数,函数 i 为 0 */
       nextNumber := getSequence()  

       /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
       fmt.Println(nextNumber())
       fmt.Println(nextNumber())
       fmt.Println(nextNumber())
       
       /* 创建新的函数 nextNumber1,并查看结果 */
       nextNumber1 := getSequence()  
       fmt.Println(nextNumber1())
       fmt.Println(nextNumber1())
    }

    以上代码执行结果为:

    1 2 3 1 2

    通过上面例子,可知闭包的作用:

    • 延长局部变量的生命周期(i)
    • 让函数外部能操作内部的局部变量(main函数通过匿名函数操作了局部变量i)

    可以简单理解为闭包和外层局部变量统称为闭包结构,闭包不会随着执行结束而自行销毁,导致局部变量未销毁,当没有变量引用闭包时,闭包才会销毁(比如将nextNumber =null)

    博客备忘,一起成长。
  • 相关阅读:
    JVM底层原理 内存模型+GC垃圾回收
    新Socket与网络小结
    Redis五大数据结构及基本指令用法
    MySql高级汇总-事务,索引,SQL调优,分库分表,读写分离
    笔试错题整理
    设计模式(思路)
    网络编程
    linux
    基础算法--KMP匹配字符串
    基础算法--整数二分
  • 原文地址:https://www.cnblogs.com/lumingprince/p/14116343.html
Copyright © 2011-2022 走看看