闭包就是一个函数 和 与其相关的引用环境组合的一个整体(实体)
package main
import(
"fmt"
)
//闭包
/*
1.闭包内的值 每次调用不会初始化,而是会累计叠加
2.
var n int = 10
return func (x int) int {
n = n + x
return n
}
这块是闭包的整体
*/
func addUpper() func (int) int {
var n int = 10
var str string = "法外狂徒"
return func (x int) int {
n = n + x
str = str + string(217) //ASCII码 str = 法外狂徒Ù str = 法外狂徒ÙÙ
fmt.Println("str = ",str)
return n
}
}
func main(){
f := addUpper()
fmt.Println(f(1)) // 11
fmt.Println(f(1)) // 12
}
package main
import(
"fmt"
"strings"
)
/*
编写一个验证后缀名的函数使用函数strings.HasSuffix
func (string) string
func:匿名函数 (string):参数类型 string: 返回数据的类型
return func (name string) string
return:返回函数 func (name string):参数的名称 string: 返回数据的类型
*/
func makeSuffix(suffix string) func (string) string {
return func (name string) string {
//name:验证的字符串 suffix:指定的后缀名称
if !strings.HasSuffix(name,suffix) {
return name + suffix
}
return name
}
}
func makeSuffix2(suffix string,name string) string {
//name:验证的字符串 suffix:指定的后缀名称
if !strings.HasSuffix(name,suffix) {
return name + suffix
}
return name
}
func main(){
f2 := makeSuffix(".jpg")
fmt.Println("后缀为 = ",f2("name")) //结果 name.jpg
fmt.Println("后缀为 = ",f2("name.jpg")) //结果 name.jpg
fmt.Println("后缀为 = ",makeSuffix2(".jpg","name")) //结果 name.jpg
fmt.Println("后缀为 = ",makeSuffix2(".jpg","name.jpg")) //结果 name.jpg
//相同的效果 闭包比函数更省略一些(如 后缀名称) 引入一次参数就可以反复使用
}