第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將附加參數(shù)傳遞給回調(diào)

將附加參數(shù)傳遞給回調(diào)

Go
一只甜甜圈 2022-08-01 10:46:08
我正在使用phao mqtt模塊與mqtt服務(wù)器進行通信?,F(xiàn)在我想訂閱一個主題,為此我需要傳遞一個帶有MessageHandler類型的回調(diào)。是否可以以某種方式將附加參數(shù)傳遞給 ?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 回答

?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

您有 2 種選擇:

  • 定義一個返回并接受結(jié)構(gòu)的函數(shù)mqtt.MessageHandler

  • 在結(jié)構(gòu)上定義一個方法,并使用相同的簽名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

  // ...

}


查看完整回答
反對 回復(fù) 2022-08-01
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

您需要從 func 返回處理程序,在需要調(diào)用其方法的結(jié)構(gòu)對象周圍創(chuàng)建一個閉包。


這是一種方法。請注意,我沒有使用過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{})

}



查看完整回答
反對 回復(fù) 2022-08-01
  • 2 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號