func (msg *Message) Acknowledge() error {
	if !msg.IsAckable {
		return errors.New("can't acknowledge, not an ackable message")
	}
	if msg.amqpChan == nil {
		return errors.New("can't acknowledge, internal channel is nil")
	}
	return msg.amqpChan.Ack(msg.deliveryTag, false)
}
Acknowledge allows for you to acknowledge message on the original channel it was received.
Will fail if channel is closed and this is by design per RabbitMQ server.
Can't ack from a different channel.
package models
import (
	"errors"
	"fmt"
	"time"
	"github.com/streadway/amqp"
)
type Notification struct {
	LetterID     uint64
	FailedLetter *Letter
	Success      bool
	Error        error
}
func (not *Notification) ToString() string {
	if not.Success {
		return fmt.Sprintf("[LetterID: %d] - Successful.\r\n", not.LetterID)
	}
	return fmt.Sprintf("[LetterID: %d] - Failed.\r\nError: %s\r\n", not.LetterID, not.Error.Error())
}
type Message struct {
	IsAckable   bool
	Body        []byte
	deliveryTag uint64
	amqpChan    *amqp.Channel
}
func NewMessage(
	isAckable bool,
	body []byte,
	deliveryTag uint64,
	amqpChan *amqp.Channel) *Message {
	return &Message{
		IsAckable:   isAckable,
		Body:        body,
		deliveryTag: deliveryTag,
		amqpChan:    amqpChan,
	}
}