基本概念
闭包:函数 + 该函数使用到的变量 共同组成了 闭包
实现方式
通过 函数 返回函数 的方法实现
外层函数实现变量控制
内层函数实现逻辑控制
案例实践
实现代码
闭包法
package main
import (
"fmt"
"strings"
)
func makeSuffix(suffix string) func(string) string {
return func(fileName string) string {
if strings.HasSuffix(fileName, suffix) {
return fileName
} else {
return fileName + suffix
}
}
}
func main() {
f := makeSuffix(".jpg")
fmt.Println(f("test"))
fmt.Println(f("test.jpg"))
}
普通方法
package main
import (
"fmt"
"strings"
)
func makeSuffix2(suffix string, fileName string) string {
if !strings.HasSuffix(fileName, suffix) {
return fileName + suffix
}
return fileName
}
func main() {
fmt.Println(makeSuffix2(".jpg", "test"))
fmt.Println(makeSuffix2(".jpg", "test.jpg"))
}
全局变量法
package main
import (
"fmt"
"strings"
)
var suffix string
func makeSuffix2(fileName string) string {
if !strings.HasSuffix(fileName, suffix) {
return fileName + suffix
}
return fileName
}
func main() {
suffix = ".jpg"
fmt.Println(makeSuffix2("test"))
fmt.Println(makeSuffix2("test.jpg"))
}
优点总结
- 闭包和普通方法相比,都可以达到变量私有,但是普通方法不能维持变量,每调用一次方法都得初始化一次变量
- 闭包和全局变量相比,都可以达到变量一次初始化,但是全局变量全局可以访问,不安全
所以,闭包好处可以总结为一句话:实现变量私有 + 初始化一次