package main

import (
"fmt"
"strconv"
) type funcType func(int, int) int // 自定义函数类型
type Callback func(int, int) int
type Callback2 func(string) func main() {
// 匿名函数经常被用于回调函数或闭包等 // 1. 定义匿名函数时直接调用
//anonymousFunc1() // 2. 先声明匿名函数,再调用匿名函数
//anonymousFunc2() // 3. 匿名函数可以作为返回值被多次调用
//f11 := anonymousFunc3()
//fmt.Println(f11(11, 22))
//fmt.Println(f11(300, 500)) // 4. 这是一个简单的回调例子,调用函数test时,调用真正的实现函数add
//fmt.Println(test(10, 20, add)) // 5. 这是一个将字符串转为Int的例子,在转换失败的情况下执行回调函数,输出错误信息
fmt.Println(stringToInt("15", errLog))
fmt.Println(stringToInt("15ab", errLog)) // 6. 闭包案例
//f := adder()
//fmt.Println(f())
//fmt.Println(f())
//fmt.Println(f())
//f2 := adder()
//fmt.Println(f2())
//fmt.Println(f2())
} // 方式一,定义匿名函数时直接调用
func anonymousFunc1() {
fmt.Println("anonymouseFunc1执行了")
a := func(data int) int {
fmt.Println("匿名函数执行了", data)
return data + 1
}(100)
fmt.Println(a)
} // 方式二:先声明匿名函数,再调用匿名函数
func anonymousFunc2() {
fmt.Println("anonymousFunc2执行了")
f := func(str string) string {
fmt.Println("匿名函数2执行了")
return str + " world"
}
ret := f("hello")
fmt.Println(ret)
} // 方式三:匿名函数可以作为返回值被多次调用
func anonymousFunc3() funcType {
return func(x, y int) int {
res := x + y
return res
}
} // 方式四:这是一个简单的回调例子,调用函数test时,调用真正的实现函数add
// 回调函数就是一个通过函数指针调用的函数。
// 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
// 回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
func test(x, y int, callback Callback) int {
return callback(x, y)
}
func add(x, y int) int {
return x + y
} // 方式五:这是一个将字符串转为Int的例子,在转换失败的情况下执行回调函数,输出错误信息
func stringToInt(str string, callback Callback2) int64 {
if value, err := strconv.ParseInt(str, 0, 0); err != nil {
callback(err.Error())
return 0
} else {
return value
}
}
func errLog(msg string) { // 记录日志消息的具体实现
fmt.Println(msg)
} // 方式六:作为闭包
// 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。
// 闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。
func adder() func() int {
sum := 0
fmt.Println("this line exec")
return func() int {
sum++
return sum
}
}

  

golang中匿名函数的应用-回调函数-闭包的更多相关文章

  1. Opengl中的GLUT下的回调函数

    void glutDisplayFunc(void (*func)(void)); 注册当前窗口的显示回调函数 参数: func:形为void func()的函数,完成具体的绘制操作 这个函数告诉GL ...

  2. C语言之函数指针、回调函数的使用

    一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...

  3. VC++的函数指针和回调函数 及友元函数

    什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变 ...

  4. C 函数指针、回调函数

    参考链接:https://www.runoob.com/cprogramming/c-fun-pointer-callback.html 函数指针 函数指针就是执行函数的指针,他可以像正常函数一样去调 ...

  5. c++指针函数的使用——回调函数

    /* 函数指针 函数也是有地址的 所谓函数指针,就是指向函数的指针,函数指针也是一个变量,可以指向不同的函数.同时通过函数指针可以调用其指向函数,从而使函数的调用更加灵活. 函数指针的用途 */ #i ...

  6. Java通过匿名类来实现回调函数

    在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2() ...

  7. 详解C#中通过委托来实现回调函数功能的方法

    委托:类型安全的指向函数的指针 使用步骤 1:声明一个委托 delegate string DelString(string s) 2:定义一个委托变量 DelString del = new Del ...

  8. JavaScript ES7 中使用 async/await 解决回调函数嵌套问题

    原文链接:http://aisk.me/using-async-await-to-avoid-callback-hell/ JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题.以往在浏览器中, ...

  9. jQuery中ajax方法无法执行回调函数问题

    最近遇到一个问题,发现使用jquery的ajax方法时,回调方法无法执行,而使用$.load()方法时却能正确返回数据.经过长时间调试最终发现是自己粗心大意,原来后台返回的是json数据,而返回的数据 ...

随机推荐

  1. 【九度OJ】题目1074:对称平方数 解题报告

    [九度OJ]题目1074:对称平方数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1074 题目描述: 打印所有不超过n( ...

  2. 【LeetCode】785. Is Graph Bipartite? 解题报告(Python)

    [LeetCode]785. Is Graph Bipartite? 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu. ...

  3. 【LeetCode】430. Flatten a Multilevel Doubly Linked List 解题报告(Python)

    [LeetCode]430. Flatten a Multilevel Doubly Linked List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: ...

  4. null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create table a(id i ...

  5. vue项目发布后,线上运行时刷新404

    修改nginx配置文件 location / { root ... index ... try_files $uri $uri/ /index.html; ---解决页面刷新404问题 } (参考官网 ...

  6. CS5218替代AG6310方案设计|替代AG6310方案|DP转HDMI 4K30Hz转换方案

    AG6310是一款实现显示端DP口转HDMI数据转换器.AG6310是一款单芯片解决方案,通过DP端口连接器传输视频和音频流,其DP1.2支持可配置的1.2和4通道,分别为1.62Gbps.2.7Gb ...

  7. 论文翻译:2020_A Robust and Cascaded Acoustic Echo Cancellation Based on Deep Learning

    论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3364/attachments/777/815/Thu-1-10- ...

  8. windows 安装GCC

    1. 下载GCC执行文件  https://pan.baidu.com/s/1foOeAo29gLr_8HhTo_69pA 提取码 cs93 2. 解压文件到D:\mingw64 3. 新建系统环境变 ...

  9. POJ 2442 Sequence堆 优先队列

    题目描述 给定m个序列,每个序列包含n个非负整数.现在我们可以从每个序列中选择一个数字以形成一个具有m个整数的序列.显然,我们可以得到n ^ m种这种序列.然后,我们可以计算每个序列中的数字总和,并获 ...

  10. Linux_grep命令

    搜索内容 命令格式如下 grep 参数 "搜索的内容" 搜索路径 注:搜索路径可缺省,缺省时,默认搜索当前目录以及其子目录下所有文件 显示文件名+内容: grep -r " ...