• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    举例讲解Go语言中函数的闭包使用

    和变量的声明不同,Go语言不能在函数里声明另外一个函数。所以在Go的源文件里,函数声明都是出现在最外层的。

    “声明”就是把一种类型的变量和一个名字联系起来。

    Go里有函数类型的变量,这样,虽然不能在一个函数里直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量,此时的函数称为闭包(closure)。

    例:

    复制代码 代码如下:

    packagemain
     
    import"fmt"
     
    funcmain(){
        add:=func(baseint)func(int)(int){
            returnfunc(iint)(int){
                returnbase+i
            }
        }
       
        add5:=add(5)
        fmt.Println("add5(10)=",add5(10))
    }

     

    这个例子唯一的使用价值大概就是用来展示闭包的构建和使用。

    add是一个闭包,因为它是无名的函数类型的变量。可以认为它是一个闭包作坊,根据入参返回(生产)一个闭包。这样add5就是使用5作为add的参数得到的一个闭包。

    闭包的声明是在另一个函数的内部,形成嵌套。和块的嵌套一样,内层的变量可以遮盖同名的外层的变量,而且外层变量可以直接在内层使用。如add的base参数在return返回的闭包的外层,所以它的值5在add返回并赋值给add5后依旧存在。当add5执行时,参数i可以从这个外层得到的base相加,得到结果15.

    个人理解:

    其实理解闭包的最方便的方法就是将闭包函数看成一个类,一个闭包函数调用就是实例化一个类。

    然后就可以根据类的角度看出哪些是“全局变量”,哪些是“局部变量”了。

    比如上例中的adder函数返回func(int) int 的函数

    pos和neg分别实例化了两个“闭包类”,在这个“闭包类”中有个“闭包全局变量”sum。所以这样就很好理解返回的结果了。

    再来看下面一个例子:

    复制代码 代码如下:

    package main

    import "fmt"

    func adder() func(int) int {
         sum := 0
         return func(x int) int {
              sum += x
              return sum
         }
    }

    func main() {
         pos, neg := adder(), adder()
         for i := 0; i 10; i++ {
              fmt.Println(
                   pos(i),
                   neg(-2*i),
              )
         }
    }

    运行返回结果:

    0 0
    1 -2
    3 -6
    6 -12
    10 -20
    15 -30
    21 -42
    28 -56
    36 -72
    45 -90
    
    

    这个就是Go中的闭包,一个函数和与其相关的引用环境组合而成的实体。

    您可能感兴趣的文章:
    • Go语言中append函数用法分析
    • GO语言延迟函数defer用法分析
    • Go语言中普通函数与方法的区别分析
    • Go语言的os包中常用函数初步归纳
    • Go语言常见哈希函数的使用
    • Go语言里的new函数用法分析
    • Golang的os标准库中常用函数的整理介绍
    • 深入解析golang编程中函数的用法
    • Golang学习笔记(五):函数
    • Golang教程之不可重入函数的实现方法
    上一篇:剖析Go编写的Socket服务器模块解耦及基础模块的设计
    下一篇:深入解析快速排序算法的原理及其Go语言版实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    举例讲解Go语言中函数的闭包使用 举例,讲解,语,言中,函数,