版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/javaxflinux/article/details/84655085
说明:
匿名函数的优越性在于可以直接使用函数内的变量,不必申明
示例代码1:
package main
import (
"fmt"
"strings"
)
func makeSuffix(suffix string) func(string) string {
return func(name string) string {
if strings.HasSuffix(name, suffix) == false {
return name + suffix
} else {
return name
}
}
}
func makeSuffix2(suffix string, name string) string {
if strings.HasSuffix(name, suffix) == false {
return name + suffix
} else {
return name
}
}
func main() {
//使用闭包
f1 := makeSuffix(".bmp")
fmt.Println(f1("test"))
fmt.Println(f1("pic"))
f2 := makeSuffix(".jpg")
fmt.Println(f2("test"))
fmt.Println(f2("pic"))
//使用普通函数
fmt.Println(makeSuffix2(".bmp", "test"))
fmt.Println(makeSuffix2(".bmp", "pic"))
}
运行结果:
test.bmp
pic.bmp
test.jpg
pic.jpg
test.bmp
pic.bmp
示例代码2:
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 为一个函数,函数 i 为 0 */
nextNumber := getSequence()
/* 调用 nextNumber 函数,i 变量自增 1 并返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 创建新的函数 nextNumber1,并查看结果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
运行结果:
1
2
3
1
2