加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Go基础知识学习(3)闭包

发布时间:2020-12-16 18:50:56 所属栏目:大数据 来源:网络整理
导读:##闭包本质是函数+引用环境,外形是一个匿名函数。 闭包类似一个函数工厂,绑定不同的引用环境,生成不同的函数。 我们还是以回调函数中的例子来说明,不过我们换成闭包来实现“抽象” 将一个数组中偶数的值相加后的结果输出,将一个数组中奇数的值相加后的结

##闭包本质是函数+引用环境,外形是一个匿名函数。 闭包类似一个函数工厂,绑定不同的引用环境,生成不同的函数。 我们还是以回调函数中的例子来说明,不过我们换成闭包来实现“抽象” 将一个数组中偶数的值相加后的结果输出,将一个数组中奇数的值相加后的结果输出。

package main

import (
	"fmt"
)

func main() {
	//create slice
	s := make([]int,10)
	fmt.Println(s)
	// init
	for i,_ := range s {
		s[i] = i
	}
	fmt.Println(s)
	//closure
	doubleSum := sum(isDouble)
	singleSum := sum(isSingle)
	fmt.Println(doubleSum(s))
	fmt.Println(singleSum(s))
}

/**
 callback function : elemet who is even number
**/
func isDouble(a int) bool {
	if a%2 == 0 {
		return true
	} else {
		return false
	}
}

/**
 callback function : elemet who is single number
**/
func isSingle(a int) bool {
	if a%2 == 0 {
		return false
	} else {
		return true
	}
}

/*
closure
*/
func sum(f func(int) bool) func([]int) int {
	return func(a []int) int {
		sum := 0
		for _,v := range a {
			if f(v) {
				sum += v
			}
		}
		return sum
	}
}

这里使用sum这个函数 返回两个匿名函数,分别完成对偶数和奇数的相加结果输出,这里面的外部环境是 f func(int) bool,这个函数的不同,生产出来的匿名函数的功能也就不一样。

##闭包官方有个案例可以参考:

  1. http://www.cnblogs.com/Jifangliang/archive/2008/08/05/1260602.html
  2. http://golang.org/doc/articles/wiki/

##代码: https://github.com/panyingyun/gostudy/blob/master/exp3.go

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读