002_解析go语言中的回调函数

乱七八糟的博客 乱七八糟的博客     2022-10-30     125

关键词:

回调函数是一种特殊的函数写法,在很多场景中发挥广泛的作用。但是对于初学者来说,回调函数是比较头疼的一个东西,不太好懂,笔者研究了一番,以网上的一个例子详细说明一下

首先看一个代码示例(来源于网上)

package main

import "fmt"

type Callback func(x, y int) int

func main() 
    x, y := 1, 2
    fmt.Println(test(x, y, add))


//实现回调
func test(x, y int, callback Callback) int 
    return callback(x, y)


func add(x, y int) int 
    return x + y

此代码运行结果如下

3

  • 在上述例子中,函数test接收3个参数,前两个参数是int类型,第三个参数为函数类型,而返回值,为int,这个int的结果,其实是callback(x,y)的运行结果,但是callback(x,y)是在其它地方实现的,是被函数add(x,y)实现的。这就是回调
  • 逻辑如下:首先程序运行,要打印test(x,y,add)的结果,函数test接收了三个参数,第三个参数传入的是函数add,返回的是callback(x,y),其实返回的就是add(x,y)。而add(x,y),被另一个地方定义好了,返回的是x+y的值。所以最终,函数main的结果是打印出了x+y,也就是3

总结一下,Go是支持函数回调的,我们可以把函数A的名称作为参数传递给另外一个函数B,然后在别的地方实现这个函数A,这样就实现了函数回调

002_go语言的值类型

代码演示:packagemainimport"fmt"funcmain()fmt.Println("go"+"lang")fmt.Println("1+1=",1+1)fmt.Println("7.0/3.0=",7.0/3.0)fmt.Println(true&&false)//&&是“与”的意思fmt.Println(true||false)//||是“或”的 查看详情

go-002-语言结构

Go语言的基础组成有以下几个部分:包声明package,必须在源文件中非注释的第一行指明这个文件属于哪个包,引入包import,在开头部位使用import导入包,单个包import“fmt”多个可以,分开写多行,或者使用 import("fmt","runtime"... 查看详情

013_go语言中的函数多返回值

...t.Println(b)_,c:=vals()fmt.Println(c)代码运行结果377代码解读:go语言的函数内建支持多返回值,例如可以同时返回一个函数的结果和错误信息(int,int)标志着这个函数返回 查看详情

golangbasic_leaming4函数(代码片段)

阅读目录Go语言函数Go语言函数章节目录Go语言函数定义_声明_调用(超详细)一、定义一个普通函数1.1函数名1.2参数列表1.3返回参数列表1.4函数体二、参数列表简写三、函数返回值3.1同一类型的返回值3.2带有变量名的返回... 查看详情

014_go语言中的变参函数

代码演示packagemainimport"fmt"funcsum(nums...int)fmt.Print(nums,"")totol:=0for_,num:=rangenumstotol+=numfmt.Println(totol)funcmain()sum(1,2)sum(1,2,3)nums:=[]int1,2,3,4sum(nums...)代码运行结果[12]3[123] 查看详情

golangbasic_leaming4函数(代码片段)

阅读目录Go语言函数Go语言函数章节目录Go语言函数定义_声明_调用(超详细)一、定义一个普通函数1.1函数名1.2参数列表1.3返回参数列表1.4函数体二、参数列表简写三、函数返回值3.1同一类型的返回值3.2带有变量名的返回... 查看详情

016_go语言中的递归

代码演示packagemainimport"fmt"funcfact(nint)intifn==0return1returnn*fact(n-1)funcmain()fmt.Println(fact(7))代码运行结果5040代码解读:go语言支持递归,以上代码是一个经典的阶乘案例fact函数在到达fact(0)之前一直在调用自身 查看详情

回调函数在命令解析中的应用

1、回调函数关于回调函数,在之前的文章《回调函数》已经详解讲解过了,这个文章不再讲解,不太懂的同学请看之前的文章《回调函数》。在之前讲解回调函数中就使用串口作为示例,使用回调函数可以方便封装通讯库,芯... 查看详情

如何从 Graphql 解析函数中的回调返回值?

】如何从Graphql解析函数中的回调返回值?【英文标题】:HowtoreturnvaluefromcallbackinGraphqlresolvefunction?【发布时间】:2017-11-0119:18:35【问题描述】:如何从回调函数返回值并将其传递给Graphql中的解析函数?这里是展示这个概念的虚... 查看详情

go语言入门四(复合类型数组切片指针)(代码片段)

...类型复合类型:把基础类型封装起来了。指针指针可是c语言中的重头戏,指针数组数组指针函数指针指针函数回调函数回调函数的数组一级指针二级指针三四五。。。。c语言指针有可以进行判断进行+-等操作go语言是不行的go语... 查看详情

#yyds干货盘点#愚公系列2022年08月go教学课程002-go语言环境安装(代码片段)

一、Go语言环境安装Go语言是一门编译性的语言需要有SDK工具包对其进行编译才能运行,其次需要有一个编辑工具来写代码,最后为SDK中的工具配置环境变量,所以总结一下可以包含三个方面:SDK工具包安装VSCode安装环境变量配... 查看详情

go_15:golang中面向对象的三大特性

  有过JAVA语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA中主要是通过super指针来完成的;继承,就是指class之间可以相互继承属性和函数... 查看详情

python进程池中的回调函数(代码片段)

...中异步执行,并且指定回调函数为func2,当投入到进程池中的每个任务执行完后,都会将返回值作为参数返回给回调函数,并且回调函数在主进程得以执行执行了10次func1、10次func2frommultiprocessingimportPooldeffunc1(n):print(\'infunc1\')return... 查看详情

go语言fmt库的print函数源码解析

//Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.packagefmtimport( "errors" "io" "os" "reflect" "sync" "unicode/utf8")// 查看详情

java示例代码_使用回调函数避免Java线程中的忙循环

java示例代码_使用回调函数避免Java线程中的忙循环 查看详情

002_第2章快速入门(代码片段)

目录目录2.02程序输入和raw_input()内建函数2.06数字2.14列表解析4.梯度下降5.2.02程序输入和raw_input()内建函数:exclamation:raw_input()整合到input()了1、在python2.x中raw_input()和input(),两个函数都存在,其中区别为:raw_input()将所有输入作为... 查看详情

002_第2章快速入门(代码片段)

目录目录2.02程序输入和raw_input()内建函数2.06数字2.14列表解析4.梯度下降5.2.02程序输入和raw_input()内建函数:exclamation:raw_input()整合到input()了1、在python2.x中raw_input()和input(),两个函数都存在,其中区别为:raw_input()将所有输入作为... 查看详情

002_第2章快速入门(代码片段)

目录目录2.02程序输入和raw_input()内建函数2.06数字2.14列表解析4.梯度下降5.2.02程序输入和raw_input()内建函数:exclamation:raw_input()整合到input()了1、在python2.x中raw_input()和input(),两个函数都存在,其中区别为:raw_input()将所有输入作为... 查看详情