2016-11-29 15 views
-2

構造体のメソッドをgolangのコールバック関数として渡すことはできますか?golangのコールバックとして構造体を渡すメソッド

など。メッセージハンドラを登録してください:

func (mc MQTTClient) MessageHandler(client MQTT.Client, msg MQTT.Message) { 
    fmt.Printf("TOPIC: %s\n", msg.Topic()) 
    fmt.Printf("MSG: %s\n", msg.Payload()) 
} 

func (mc MQTTClient) AddMessageHandler(){ 
    //.. 
    //subscribe to the topic /go-mqtt/sample and request messages to be delivered 
    //at a maximum qos of zero, wait for the receipt to confirm the subscription 

    if token := c.Subscribe("go-mqtt/sample", 0, mc.MessageHandler); token.Wait() && token.Error() != nil { 
        fmt.Println(token.Error()) 
        os.Exit(1) 
    } 
} 

ありがとうございました!

+1

試しましたか?それは動作しましたか?そうでない場合:コンパイラはあなたに何を伝えましたか? – Volker

+0

問題が解決しました。プログラムは、nilポインタ逆参照のために実行時エラーで終了しました。したがって、私は関数の受け渡しが間違っていると結論づけましたが、エラーはその前に非ポインタメソッド受信側で代入されていました。あなたの時間を無駄にして申し訳ありません。 :私を許して: – Aljoscha

答えて

1

を見てみたいことがありhttps://golang.org/doc/codewalk/functions/ 正しいように見えるをパラメータとして、あなたはそれらを渡すことができ、ファーストクラスの機能を持っています。

関連する問題