由于原代码较长,以下是核心函数的简化示例,展示如何在Go语言中使用MQTT客户端库(如Paho.MQTT.Go)连接到MQTT服务器,并发送和接收消息。
package main
import (
"fmt"
"github.com/eclipse/paho.mqtt.golang"
"os"
"time"
)
func main() {
opts := mqtt.NewClientOptions().AddBroker("tcp://iot.eclipse.org:1883")
opts.SetClientID("go-mqtt-client")
opts.SetUsername("username")
opts.SetPassword("password")
opts.SetDefaultPublishHandler(messagePublished)
opts.OnConnect = onConnected
opts.OnDisconnect = onDisconnected
c := mqtt.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
if token := c.Subscribe("go/+/mqtt", 0, messageReceived); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}
for i := 0; i < 5; i++ {
time.Sleep(2 * time.Second)
c.Publish("go/out/mqtt", 0, false, "Hello MQTT")
}
c.Disconnect(250)
}
func onConnected(c mqtt.Client) {
fmt.Println("Connected")
}
func onDisconnected(c mqtt.Client, e error) {
fmt.Println("Disconnected: ", e)
}
func messagePublished(client mqtt.Client, message mqtt.Message) {
fmt.Printf("Published: qos=%d, retained=%t, dup=%t, packetId=%d\n", message.Qos, message.Retained, message.Dup, message.Id)
}
func messageReceived(client mqtt.Client, message mqtt.Message) {
fmt.Printf("Received: %s from %s\n", message.Payload(), message.Topic())
}
这段代码展示了如何使用Paho.MQTT.Go客户端库连接到MQTT服务器(在这个例子中是eclipse.org的公共服务器),订阅一个主题并发布消息。它还展示了如何处理连接、断开连接和接收到消息的事件。这是学习如何在Go中使用MQTT的一个很好的起点。