当前位置: 首页 > news >正文

go语言回调函数的使用

前言

在 Go 语言中,回调函数是一种将一个函数作为参数传递给另一个函数,在特定的事件发生时被调用的编程模式。

一、回调函数的定义

type OnTaskHandler func(r []byte)type remoteTaskClient struct {sync.RWMutexonTask OnTaskHandler
}

以上定义了一个用于处理任务的结构体,可以通过设置回调函数的方式来灵活地处理不同的情况,同时使用读写锁来保证在并发环境下的安全性。 

二、定义结构体方法

func (c *remoteTaskClient) SetOnTaskHandler(onTask OnTaskHandler) {c.Lock()defer c.Unlock()c.onTask = onTask
}func (c *remoteTaskClient) ProcessMessage(message []byte) {if c.onTask != nil {c.onTask(message) // 调用回调函数处理消息}
}

定义了两个方法一个是与回调函数绑定的方法,另一个是任务参数接收的方法。 

三、主函数调用

func main() {client := &remoteTaskClient{}// 模拟接收消息,此时没有回调函数被设置client.ProcessMessage([]byte("Hello, world!"))// 设置回调函数client.SetOnTaskHandler(func(data []byte) {fmt.Println("Received message:", string(data))})// 模拟接收消息,此时回调函数已被设置client.ProcessMessage([]byte("Hello again, world!"))
}

主函数中SetonTaskHandler方法的参数中包含了回调函数的具体实现,当接收到任务信息就会执行。 

四、测试函数 

package mainimport ("fmt"
)type OnTaskHandler func(r []byte)type remoteTaskClient struct {sync.RWMutexonTask OnTaskHandler
}func (c *remoteTaskClient) SetOnTaskHandler(onTask OnTaskHandler) {c.Lock()defer c.Unlock()c.onTask = onTask
}func (c *remoteTaskClient) ProcessMessage(message []byte) {if c.onTask != nil {c.onTask(message) // 调用回调函数处理消息}
}func main() {client := &remoteTaskClient{}// 模拟接收消息,此时没有回调函数被设置client.ProcessMessage([]byte("Hello, world!"))// 设置回调函数client.SetOnTaskHandler(func(data []byte) {fmt.Println("Received message:", string(data))})// 再次模拟接收消息,此时回调函数已被设置client.ProcessMessage([]byte("Hello again, world!"))
}

主函数中回调函数具体通过匿名函数实现。 

http://www.lryc.cn/news/475234.html

相关文章:

  • 区块链学习笔记(一)
  • 解决QT打包发布App Store时(90238)错误
  • 使用Vite构建现代化前端应用
  • PyQt入门指南三十八 QWizard向导组件
  • 【数学二】线性代数-矩阵-矩阵的概念及运算
  • 近期学习前端的心得
  • qt QMenu详解
  • HTMLCSS:旋转的动态卡片
  • 通过自然语言表达你的想法。GitHub Spark让任何人都能使用人工智能,为自己创建软件...
  • c++的list类
  • uniapp数据缓存
  • HarmonyOS-权限管理
  • Github 2024-11-02 Rust开源项目日报 Top10
  • 修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程
  • unreal engine5动画重定向
  • 蓝桥杯练习笔记(二十-日期问题)
  • jenkins 构建报错 mvn: command not found
  • Vue computed watch
  • 【java】java的基本程序设计结构06-运算符
  • 数据建模圣经|数据模型资源手册卷3,数据建模最佳实践
  • Kafka相关知识点(上)
  • network HCIE认证
  • 造纸粉体分散机、改性包覆机、改性打散机
  • npm入门教程1:npm简介
  • Vue3使用AntV | X6绘制流程图:开箱即用
  • grpc 快速入门
  • layui 实现 城市联动
  • C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)
  • 报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • OpenCV基本操作(python开发)——(7)实现图像校正