当前位置: 首页 > 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.mrgr.cn/news/64287.html

相关文章:

  • 63 mysql 的 行锁
  • 解决pytorch问题:received an invalid combination of arguments - got
  • vscode在windows和linux如何使用cmake构建项目并make生成可执行文件,两者有什么区别
  • 浔川社团官方联合会入驻后计划公告
  • SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式
  • 力扣hot100-->位运算
  • 抓包sslpinning绕过
  • 代码随想录第十八天
  • C语言之写一个修改数组内容的函数
  • 优化外贸管理 解锁全球业务流畅双效
  • 原子操作(atomic operation)
  • Kotlin协程suspend的理解
  • 【JavaEE初阶】网络原理(4)
  • Linux云计算 |【第五阶段】CLOUD-DAY10
  • 国产操作系统卖疯了!最营收7.84亿,最低1.5亿
  • 每日OJ题_牛客_排序子序列_模拟_C++_Java
  • 2022美亚杯复现(部分)
  • 【系统架构设计师】2024年上半年真题论文: 论模型驱动架构设计方法及其应用(包括解题思路和素材)
  • 034_Structural_Transient_In_Matlab结构动力学问题求解
  • 学习GCC
  • 速通一些常见的神经网络
  • 高德地图如何标注店铺名称和位置信息?
  • vue中的nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】
  • 用Python语言,利用 tk包,实现选择2个目录,进行COPY功能
  • ssm037物流管理系统设计与实现+jsp(论文+源码)_kaic
  • 信号量本质 信号量实验(控制车辆运行,优先级反转)互斥量