Go The Way 之 匿名函数和闭包

package main

import "fmt"

/**
匿名函数和闭包函数
 */
func main() {
	sum := nimingTest(1,2 )
	fmt.Println(sum)

	// 闭包函数实践
	func1 := addUper()
	fmt.Println(func1(1)) //1
	fmt.Println(func1(2)) //3
	fmt.Println(func1(3)) //6
	
	
	func2 := addUper()
	fmt.Println(func2(1)) //1
	fmt.Println(func2(2)) //3
	fmt.Println(func2(3)) //6
}


/**
要说闭包,首先需要说匿名函数。匿名函数顾名思义就是把函数名称给隐藏了、不要了,只有函数的关键字,参数列表、返回值列表和实现
 */
func nimingTest(a, b int) int {
	sum := func(a ,b int) int {
		return a + b;
	}
	return sum(a,b)
}

/**
下面是闭包:闭包就是一个函数和其相关的引用环境组合的一个整体
简单来说就是 一个匿名函数和这个匿名函数中使用到的外部参数形成了一个整体。比如:闭包是类, 匿名函数是类中的方法,而 外部参数就是 类中的变量
 */

func addUper() func(x int) int {
	n := 0
	return func(x int) int {
		n = n + x
		return n
	}
}
  • 匿名函数基本在高级语言中都有,在这里就不详细说明了,主要关注下闭包
  • addUper 是一个闭包,n 是一个变量,返回了一个匿名函数,匿名函数在函数内部使用了匿名函数外的变量,导致匿名函数和这个变量产生了一个微妙的联系,n 不再是每次用都要重新创建,而是类似被Java中的static 关键字所修饰(当然不同的时重新获取新的返回的匿名函数时,n会回到初始值0),导致每次调用函数后都会进行更新数值。例如上面的 1,3,6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值