• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Golang > 举例讲解Go语言中函数的闭包使用

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

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了c语言传递闭包,闭包,js闭包,什么是闭包,javascript闭包等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

和变量的声明不同,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))
}

</div> 

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

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),
          )
     }
}

</div>

运行返回结果:

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

</div>

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

</div>

您可能想查找下面的文章:

  • 深入理解Go语言中的闭包
  • 举例讲解Go语言中函数的闭包使用
  • 简单了解Go语言中函数作为值以及函数闭包的使用

相关文章

  • Go语言中更优雅的错误处理
  • go语言获取系统盘符的方法
  • 浅析Go语言编程当中映射和方法的基本使用
  • Go语言中的range用法实例分析
  • Go语言按字节截取字符串的方法
  • 从Node.js 转到 Go平台
  • Go语言入门教程之基础语法快速入门
  • 使用Go语言实现远程传输文件
  • Go语言中的方法定义用法分析
  • GO 语言学习指南

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Go语言实现简单留言板的方法
    • 详解Golang编程中的常量与变量
    • golang简单获取上传文件大小的实现代码
    • sublime安装支持go和html的插件
    • 使用Go语言实现微信公众平台
    • Go语言实现类似c++中的多态功能实例
    • Go语言使用组合的方式实现多继承的方法
    • go语言实现猜数字小游戏的方法
    • Go语言中常量定义方法实例分析
    • Go语言实现定时器的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有