Go Client
The Paho Go Client provides an MQTT client library for connection to MQTT brokers via TCP, TLS or WebSockets
Features
Source
https://github.com/eclipse/paho.mqtt.golang
Download
Once you have installed Go and configured your environment you can install the Paho Go client by running;
go get github.com/eclipse/paho.mqtt.golang
Documentation
API documentation for the Paho Go client is available at
Alternatively, once you have downloaded the src via go get
you can run godoc -http=":6060"
and navigate to http://localhost:6060 to browse the documentation locally
Getting Started
The client can connect to a broker using TCP, TLS or a WebSocket connection. Ensure the broker you're using supports the connection type you wish to use.
The type of connection required is specified by the scheme of the connection URL set in the ClientOptions struct, for example:
tcp://mqtt.eclipseprojects.io:1883
- connect to mqtt.eclipseprojects.io on port 1883 using plain TCPws://mqtt.eclipseprojects.io:1883
- connect to mqtt.eclipseprojects.io on port 1883 using WebSocketstls://mqtt.eclipseprojects.io:8883
- connect to mqtt.eclipseprojects.io on port 8883 using TLS (ssl:// and tcps:// are synonyms for tls://)
Here is a very simple example that subscribes to a topic and publishes 5 messages:
package main import ( "fmt" //import the Paho Go MQTT library MQTT "github.com/eclipse/paho.mqtt.golang" "os" "time" ) //define a function for the default message handler var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) { fmt.Printf("TOPIC: %s\n", msg.Topic()) fmt.Printf("MSG: %s\n", msg.Payload()) } func main() { //create a ClientOptions struct setting the broker address, clientid, turn //off trace output and set the default message handler opts := MQTT.NewClientOptions().AddBroker("tcp://mqtt.eclipseprojects.io:1883") opts.SetClientID("go-simple") opts.SetDefaultPublishHandler(f) //create and start a client using the above ClientOptions c := MQTT.NewClient(opts) if token := c.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } //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, nil); token.Wait() && token.Error() != nil { fmt.Println(token.Error()) os.Exit(1) } //Publish 5 messages to /go-mqtt/sample at qos 1 and wait for the receipt //from the server after sending each message for i := 0; i < 5; i++ { text := fmt.Sprintf("this is msg #%d!", i) token := c.Publish("go-mqtt/sample", 0, false, text) token.Wait() } time.Sleep(3 * time.Second) //unsubscribe from /go-mqtt/sample if token := c.Unsubscribe("go-mqtt/sample"); token.Wait() && token.Error() != nil { fmt.Println(token.Error()) os.Exit(1) } c.Disconnect(250) }