首页 > 其他分享 >Golang回调函数

Golang回调函数

时间:2023-04-09 15:13:34浏览次数:53  
标签:函数 int fmt Golang callback func 回调

Golang回调函数实例二则

定义

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

机制

定义一个回调函数
提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者
当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理

例1.

调用函数test时,调用真正的实现函数add

package main

import "fmt"

type Callback func(x, y int) int

// 提供一个接口,让外部去实现
func test(x, y int, callback Callback) int {
    return callback(x, y)
}

// 回调函数的具体实现
func add(x, y int) int {
    return x + y
}

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

例2.
这是一个将字符串转为Int的例子,在转换失败的情况下执行回调函数,输出错误信息

package main

import (
    "strconv"
    "fmt"
)

type Callback func(msg string)

//将字符串转换为int64,如果转换失败调用Callback
func stringToInt(s string, callback Callback) int64 {
    if value, err := strconv.ParseInt(s, 0, 0); err != nil {
        callback(err.Error())
        return 0
    } else {
        return value
    }
}

// 记录日志消息的具体实现
func errLog(msg string) {
    fmt.Println("Convert error: ", msg)
}

func main() {
    fmt.Println(stringToInt("18", errLog))
    fmt.Println(stringToInt("hh", errLog))
}

总结

定义一个callback 函数类型的type
接着在函数中传入callback函数
在需要callback函数时进行调用

标签:函数,int,fmt,Golang,callback,func,回调
From: https://www.cnblogs.com/ydssx7/p/17300346.html

相关文章

  • 内存函数
    今日份学习“内存函数”前言:当我们了解字符串相关函数可以对一系列的字符串进行操作,但这些函数只针对于字符串操作且太局限性了,所以为了破开这个局限性,该篇文章将介绍的函数就能解决这个问题。我们知道字符串相关的函数肯定是对字符串的每个字符进行操作控制的,每个字符且只占一个字......
  • 一文弄懂Python中的sort和sorted函数
    1.引言Python中的sort()和sorted()函数主要用于按升序或降序对数据进行排序。在本文中比较用于列表时,两个函数在编程和语法上的差异。闲话少说,我们直接开始吧!2.Sort()函数基本用法用于列表排序的sort函数的语法如下:list.sort(reverse=False,key=None)用法如下:参数reverse:默认为......
  • 深度学习之PyTorch实战(5)——对CrossEntropyLoss损失函数的理解与学习
     其实这个笔记起源于一个报错,报错内容也很简单,希望传入一个三维的tensor,但是得到了一个四维。RuntimeError:onlybatchesofspatialtargetssupported(3Dtensors)butgottargetsofdimension:4查看代码报错点,是出现在pytorch计算交叉熵损失的代码。其实在......
  • C语言的回调函数原来这么简单
    手机端阅读:C语言的回调函数原来这么简单 了解开发语言的朋友应该都会对回调函数有所了解,在很多的程序开发语言中都能看到回调的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指定的部分,这个时候可以考虑使用回调函数的方式,这样做思路更加的清晰,也能使代码结构的逻辑更加......
  • C++逆向分析——构造函数和析构函数
    构造函数与析构函数构造函数structStudent{inta;intb; Student(){printf("Look.");} voidInit(inta,intb){this->a=a;this->b=b;} };如上代码中,我们发现了存在一个函数,这个函数没有返回类型并且与结构体名称一样,那这段函数在什么......
  • 龙龙自己写的 JS表格 生成函数
    functiongetTable(tr,td){varnum=1;document.write('<tableborder="1"width="600px">')//vartr=10;for(vari=1;i<=tr;i++){document.write('<tr>')//vartd=10for(varj=1;j<=td;j++){document.......
  • C++函数重载和对象
    函数的默认参数intfun(inta,intb=10,intc=20){returna+b+c;}intmain(){cout<<fun(10)<<endl;//当参数有值时也可以输出正确,如果程序员加了返回值就用程序员加入的值。}形参的数据从左到右当中间有参数后面也需要定义一个函数和声明只能实现一个;占位参数voidfun(int*a,int......
  • Rust编程语言入门之函数式语言特性:-迭代器和闭包
    函数式语言特性:-迭代器和闭包本章内容闭包(closures)迭代器(iterators)优化改善12章的实例项目讨论闭包和迭代器的运行时性能一、闭包(1)-使用闭包创建抽象行为什么是闭包(closure)闭包:可以捕获其所在环境的匿名函数。闭包:是匿名函数保存为变量、作为参数可在一个地方......
  • 关于gcc设置入口函数的讨论
    关于gcc设置入口函数的讨论一般的程序入口函数是_start(不是main,参考【2】)。如果我们想在main之前做点啥工作,或者希望链接一个项目的main.o对象,就需要另外指定入口函数。虽然gcc提供了指定入口函数的参数,但我发现往往不是我们想要的。gcc的指定入口函数参数gcc提供了两个命......
  • Qt-FFmpeg开发-回调函数读取数据(8)
    音视频/FFmpeg#QtQt-FFmpeg开发-使libavformat解复用器通过自定义AVIOContext读取回调访问媒体内容目录音视频/FFmpeg#QtQt-FFmpeg开发-使libavformat解复用器通过自定义AVIOContext读取回调访问媒体内容1、概述2、实现效果3、主要代码4、完整源代码更多精彩内容......