code: func (c *Client) Close() error {
  	c.mutex.Lock()
  	defer c.mutex.Unlock()
  
  	// check if connected
  	if atomic.LoadUint32(&c.state) < clientConnecting {
  		return ErrClientNotConnected
  	}
  
  	return c.end(nil, false)
  }
docs: // Close closes the client immediately without sending a Disconnect packet and
  // waiting for outgoing transmissions to finish.