Go- 闭包函数
发布于: 4 小时前
Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
匿名函数
高阶函数
闭包使用举例
使用闭包调试
代码示例可以直接运行
package main
import (
"fmt"
"log"
"runtime"
"strings"
)
func main() {
/*
匿名函数又称为闭包函数
*/
/*
定义匿名函数并调用
*/
//func(x y, int) { // 编译错误:syntax error: mixed named and unnamed function parameters 也就是说 x y int这种形式的形参只能放在有名函数中
func(x int, y int) {
fmt.Println(x, y)
}(2, 3)
/*
匿名函数赋值给变量并调用
*/
f1 := func(s string) {
fmt.Println("GO String:", s)
}
f1("Hello")
/*
高阶函数:函数的返回值为函数
*/
myAdd := Add(100)
res := myAdd(1)
fmt.Printf("100 + 1 = %d\n", res)
/*
高阶函数内的变量累加
*/
myRepeatAdd := RepeatAdd()
fmt.Println(myRepeatAdd(10), myRepeatAdd(100), myRepeatAdd(1000)) // 输出:11 111 1111 注意:不是11 101 1001
/*
闭包使用举例:添加文件后缀
*/
addBmp := FileAddSuffix(".bmp")
addJpg := FileAddSuffix(".jpg")
fmt.Println(addBmp("file"), addJpg("file")) // 输出:file.bmp file.jpg
/*
使用闭包调试
*/
where := func() {
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%d", file, line)
}
where() // 输出:2021/08/24 19:05:04 F:/CloudNative/GO/021_ClosureFunc.go:58---输出位置信息,方便调试
where() // 输出:2021/08/24 19:05:04 F:/CloudNative/GO/021_ClosureFunc.go:59
log.SetFlags(log.Llongfile)
log.Print("I am Here") // 输出:F:/CloudNative/GO/021_ClosureFunc.go:62: I am Here
}
func Add(a int) func(b int) int {
return func(b int) int {
return a + b
}
}
func RepeatAdd() func(b int) int {
var x = 1
return func(b int) int {
x += b
return x
}
}
func FileAddSuffix(suffix string) func(string) string {
return func(name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix
}
return name
}
}
复制代码
划线
评论
复制
发布于: 4 小时前阅读数: 3
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论