code: func newIoTCoreSender(addr models.Addressable) sender {
  	protocol := strings.ToLower(addr.Protocol)
  	broker := fmt.Sprintf("%s%s", addr.GetBaseURL(), addr.Path)
  	deviceID := extractDeviceID(addr.Publisher)
  
  	opts := MQTT.NewClientOptions()
  	opts.AddBroker(broker)
  	opts.SetClientID(addr.Publisher)
  	opts.SetUsername(addr.User)
  	opts.SetPassword(addr.Password)
  	opts.SetAutoReconnect(false)
  
  	if validateProtocol(protocol) {
  		c := Configuration.Certificates["MQTTS"]
  		cert, err := tls.LoadX509KeyPair(c.Cert, c.Key)
  		if err != nil {
  			LoggingClient.Error("Failed loading x509 data")
  			return nil
  		}
  
  		opts.SetTLSConfig(&tls.Config{
  			ClientCAs:          nil,
  			InsecureSkipVerify: true,
  			Certificates:       []tls.Certificate{cert},
  		})
  	}
  
  	if addr.Topic == "" {
  		addr.Topic = fmt.Sprintf("/devices/%s/events", deviceID)
  	}
  
  	return &mqttSender{
  		client: MQTT.NewClient(opts),
  		topic:  addr.Topic,
  	}
  }
docs: // newIoTCoreSender returns new Google IoT Core sender instance.