code: func (cli *Client) Publish(opts *PublishOptions) error {
  	// Lock for reading.
  	cli.muConn.RLock()
  
  	// Unlock.
  	defer cli.muConn.RUnlock()
  
  	// Check the Network Connection.
  	if cli.conn == nil {
  		return ErrNotYetConnected
  	}
  
  	// Initialize the options.
  	if opts == nil {
  		opts = &PublishOptions{}
  	}
  
  	// Create a PUBLISH Packet.
  	p, err := cli.newPUBLISHPacket(opts)
  	if err != nil {
  		return err
  	}
  
  	// Send the Packet to the Server.
  	cli.conn.send <- p
  
  	return nil
  }
docs: // Publish sends a PUBLISH Packet to the Server.