用 go 写一个 mqtt链接
时间: 2024-03-08 15:46:37 浏览: 19
下面是一个简单的使用 Go 语言连接 MQTT 服务器的示例代码。在此之前,需要先安装 mqtt 包,可以使用以下命令安装:
```
go get github.com/eclipse/paho.mqtt.golang
```
然后,可以使用以下代码连接 MQTT 服务器:
```go
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"github.com/eclipse/paho.mqtt.golang"
)
func main() {
// 创建 MQTT 连接配置
opts := mqtt.NewClientOptions()
opts.AddBroker("tcp://localhost:1883") // 设置 MQTT 服务器地址
opts.SetClientID("go-mqtt-sample") // 设置客户端 ID
opts.SetUsername("XXXXX") // 设置用户名
opts.SetPassword("XXXXX") // 设置密码
// 创建 MQTT 客户端
client := mqtt.NewClient(opts)
// 连接 MQTT 服务器
if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
// 订阅主题
if token := client.Subscribe("test", 0, nil); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}
// 处理消息
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
// 取消订阅主题
if token := client.Unsubscribe("test"); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}
// 断开 MQTT 连接
client.Disconnect(250)
os.Exit(0)
}()
for {
msg := <-client
fmt.Printf("Received message on topic: %s, message: %s\n", msg.Topic(), msg.Payload())
}
}
```
其中,`AddBroker` 方法用于设置 MQTT 服务器地址,`SetClientID` 方法用于设置客户端 ID,`SetUsername` 和 `SetPassword` 方法用于设置用户名和密码。`Subscribe` 方法用于订阅主题,`Unsubscribe` 方法用于取消订阅主题。
在此示例代码中,我们还使用了 `os/signal` 和 `syscall` 包来处理操作系统的信号,以便在程序退出时正确关闭 MQTT 连接。