package main
import (
"fmt"
"strings"
)
// 利用匿名函数和闭包实现文件后缀批改
func makeSuffix(suffix string) func (string) string{return func (fileName string) string{
// 如果文件后缀不是以 suffix 结尾,则加上后缀,否则返回原文件名
if !strings.HasSuffix(fileName, suffix) {return fileName + suffix}
return fileName
}
}
func main(){f := makeSuffix(".jpg")
fileName1 := "file.jpg"
fileName2 := "file"
fmt.Println(f(fileName1))
fmt.Println(f(fileName2))
}
执行后果
file.jpg
file.jpg
阐明
这里 makeSuffix 返回的匿名函数 f 和作为内部传入的参数 ”.jpg” 独特形成了一个闭包,使得在传入一次 ”.jpg” 的状况下能够重复使用,这就奇妙的用到了闭包中保留上次应用的值的个性代替了重复传值的问题。