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 關注
- 126 瀏覽
添加回答
舉報