2 回答
TA贡献1804条经验 获得超3个赞
您有 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
// ...
}
TA贡献1820条经验 获得超9个赞
您需要从 func 返回处理程序,围绕需要调用的结构对象创建一个闭包。
这是一种方法。请注意,我没有使用 lib,所以下面的 main func 可能无法编译,但你会明白的:
package main
import (
"fmt"
)
type SomeStruct struct{}
func (ss *SomeStruct) Invoke() {
fmt.Println("struct method called")
}
func GetHandler(s *SomeStruct) mqtt.MessageHandler {
return func(client mqtt.Client, msg mqtt.Message) {
fmt.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic())
s.Invoke()
}
}
func main() {
handler := GetHandler(&SomeStruct{})
//pass to lib or assume it is invoked by lib
//handler(Client{}, Message{})
}
- 2 回答
- 0 关注
- 168 浏览
添加回答
举报
