Hi Flo, thank you for the kind words.
In my case I needed to use an in-memory SQS to use with unit testing. I only needed basic functionality to Receive, Send, Delete and ChangeVisibility. Originally I just used a slice. However, when I was bench testing with thousands of messages the Delete and ChangeVisibility operations were becoming slower (since it always has to do a full scan of all messages to find them by ID).
I needed to use a data structure that would maintain the insert order (queue order), but also allowed me to delete and update any message by its ID in O(1) time.