首页 > 解决方案 > 将附加参数传递给回调

问题描述

我正在使用 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
}

标签: go

解决方案


您有 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
  // ...
}

推荐阅读