go - 将附加参数传递给回调
问题描述
我正在使用 phao mqtt 模块与 mqtt 服务器进行通信。
现在我想订阅一个主题,为此我需要传递一个带有 type 的回调MessageHandler
。是否可以将附加参数传递给MessageHandler
?
到目前为止,我的处理程序看起来像这样:
var MyMessageHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
fmt.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic())
# Call here a stuct method
}
解决方案
您有 2 个选项:
- 定义一个返回
mqtt.MessageHandler
并接受你的结构的函数 - 在您的结构上定义一个方法和相同的签名
mqtt.MessageHandler
type S struct{}
func MessageHandler(s S) mqtt.MessageHandler {
return func(client mqtt.Client, msg mqtt.Message) {
// use `s`
// ...
}
}
func (s *S) MessageHandler(client mqtt.Client, msg mqtt.Message) {
// use `s`
// ...
}
用法:
func main() {
s := S{}
mh := MessageHandler(s)
mh = s.MessageHandler // same type
// use mh
// ...
}
推荐阅读
- javascript - 如何在反应图像上传器中为多个文件创建 url?
- swiftui - SwiftUI - 使用 URL 打开外部应用程序也返回主页
- python - 在 Windows 上找不到 Python
- angular - 如何在 Angular 11 中循环表单控件并发出表单控件?
- vue.js - 如果页面是从某个页面重定向的,如何在 vuejs 中添加显示组件?
- python - 为什么 Python 3 中的子进程不会执行 bash 下标并会挂在上面?我正在尝试在我自己的 Apple M1 库路径解析器中使用它
- c# - 如何删除场景中的这个红框?
- ios - 包含 2 个视图的内容优先级
- excel - 动态范围内带前缀的目标值
- javascript - 如何在 node.js 中正确导入 strophe.js 插件