2 回答

TA贡献1785条经验 获得超4个赞
您有 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贡献1845条经验 获得超8个赞
您需要从 func 返回处理程序,在需要调用其方法的结构对象周围创建一个闭包。
这是一种方法。请注意,我没有使用过lib,所以下面的主要功能可能无法编译,但你会明白:
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 关注
- 107 浏览
添加回答
举报