写点什么

Go- 闭包函数

用户头像
HelloBug
关注
发布于: 4 小时前
Go- 闭包函数

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 }}
复制代码


用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- 闭包函数