一、闭包
闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)
二、闭包入门
//闭包
package main
import (
"fmt"
)
//累加器
func Add() func (int) int {
var n int = 10
str := "hello"
return func (x int) int {
n = n + x
str += string(36)
fmt.Println("str",str)
return n
}
}
func main() {
f := Add()
fmt.Println(f(1))
fmt.Println(f(2))
}
二、闭包练习
编写一个函数makeufix(sufix string) 可以接收一个文件后缀名(比如.jpg), 并返回一个闭包。调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如jipg) ,则返回文件名.jpg,如果已经有.jpg后缀, 则返回原文件名。
//闭包
package main
import (
"fmt"
"strings"
)
func makeSuffix(suffix string) func (string) string {
return func (name string) string {
//判断文件名是否有后缀
if !strings.HasSuffix(name, suffix) {
//没有后缀就添加
return name + suffix
}
return name
}
}
func main() {
a1 := makeSuffix(".jpg")
fmt.Println(a1("a1"))
}
三、闭包的好处
可以使传入的一个值反复使用