Golang 闭包的简单使用

基本介绍
  • 闭包就是一个函数与其相关的引用环境组成的一个整体(所谓的引用环境其实可以理解成变量).
示例
  • 代码
package main

import "fmt"

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

func add() func(int) int {
	var n int = 10
	return func(i int) int {
		n += 1
		return n
	}
}
  • 结果
    在这里插入图片描述
  • 说明
    1. add 是一个函数,返回的数据类型是 func(int) int
    2. 返回的是一个匿名函数,但是这个匿名函数引用到函数外部的变量 n ,因此这个匿名函数就和这个 n 组成一个闭包.

网上有一个闭包的最佳实践,抄来用一下.

package main

import (
	"fmt"
	"strings"
)

func main() {
	f := makeSuffix(".jpg")
	fmt.Println("makeSuffix = 有后缀 ", f("test01.jpg"))
	fmt.Println("makeSuffix = 没有后缀 ", f("test01"))
	fmt.Println("===================")
	fmt.Println("makeSuffix2 = 有后缀", makeSuffix2(".jpg", "test01.jpg"))
	fmt.Println("makeSuffix2 = 没有有后缀", makeSuffix2(".jpg", "test01"))
}

func makeSuffix(suffix string) func(string) string {
	return func(name string) string {
		if !strings.HasSuffix(name, suffix) {
			return name + suffix
		}
		return name
	}
}

func makeSuffix2(suffix string, name string) (string) {
	if !strings.HasSuffix(name, suffix) {
		return name + suffix
	}
	return name
}

运行结果
在这里插入图片描述
这个例子中使用闭包的优点是 : 只需要传入一次后缀名就可以了.

发布了145 篇原创文章 · 获赞 24 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xiaobinqt/article/details/95110086