码迷,mamicode.com
首页 > 其他好文 > 详细

Go:闭包

时间:2019-05-24 23:43:27      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:import   传统   引用   一个   实现   需要   png   匿名函数   div   

闭包就是一个函数与其相关的引用环境组合的一个整体(实体)。

package main

import "fmt"

func add() func(int) int {
	i := 0
	return func(j int) int {
		i += j
		return i
	}
}

func main() {
	f := add()
	fmt.Println(f(1)) // 1
	fmt.Println(f(2)) // 3
	fmt.Println(f(3)) // 6
}

/*
add 是一个函数,返回的数据类型是 func(int) int,它是一个匿名函数,这个
匿名函数引用了函数外的i,因此这个匿名函数就和i形成了一个整体,构成闭包。
 */

另一个示例:

package main

import (
	"fmt"
	"strings"
)

// 使用闭包形式检测一张图片后缀是否以 .png 结尾,如果不是则拼接上返回
func checkImageSuffix(suffix string) func(string) string {
	return func(name string) string {
		if !strings.HasSuffix(name, suffix) {
			return name + suffix
		} else {
			return name
		}
	}
}

func main() {
	f := checkImageSuffix(".png")
	fmt.Println(f("peiqi")) 	// peiqi.png
	fmt.Println(f("luffy.png")) // luffy.png
}

显然如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入后缀名,而闭包则可以保留上次引用的某个值,只需传入一次就可反复使用,这就是区别。

Go:闭包

标签:import   传统   引用   一个   实现   需要   png   匿名函数   div   

原文地址:https://www.cnblogs.com/believepd/p/10920747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!