code: func (c *Client) SubscribeMultiple(subscriptions []packet.Subscription) (SubscribeFuture, error) {
  	c.mutex.Lock()
  	defer c.mutex.Unlock()
  
  	// check if connected
  	if atomic.LoadUint32(&c.state) != clientConnected {
  		return nil, ErrClientNotConnected
  	}
  
  	// allocate subscribe packet
  	subscribe := packet.NewSubscribe()
  	subscribe.ID = c.Session.NextID()
  	subscribe.Subscriptions = subscriptions
  
  	// create future
  	subFuture := future.New()
  
  	// store future
  	c.futureStore.Put(subscribe.ID, subFuture)
  
  	// send packet
  	err := c.send(subscribe, true)
  	if err != nil {
  		return nil, c.cleanup(err, false, false)
  	}
  
  	// wrap future
  	wrappedFuture := &subscribeFuture{subFuture}
  
  	return wrappedFuture, nil
  }
docs: // SubscribeMultiple will send a Subscribe packet containing multiple topics to
  // subscribe. It will return a SubscribeFuture that gets completed once a
  // Suback packet has been received.