Go: Implement a FIFO queue

A simple way to implement a temporary queue in Go is to use a slice: - to enqueue you use the built-in append function, and - to dequeue you slice off the first element.

// Create
var queue []string

// Enqueue
queue = append(queue, "Hello ")
queue = append(queue, "world!")

for len(queue) > 0 {
        // Print first
        fmt.Print(queue[0])

        // Dequeue
        queue = queue[1:]
}
// Output: Hello world!

Watch out for memory leaks

You may want to remove the first element before dequeuing:

// Dequeue
queue[0] = "" // to avoid memory leak
queue = queue[1:]

Also, note that the memory allocated for the array is never returned. For a long-living queue you should probably use a dynamic data structure, such as a linked list.

Linked list

The container/list package implements a doubly linked list which can be used as a queue.

// Create
queue := list.New()

// Enqueue
queue.PushBack("Hello ")
queue.PushBack("world!")

for queue.Len() > 0 {
        // Print first
        e := queue.Front()
        fmt.Print(e.Value)

        // Dequeue
        queue.Remove(e)
}
// Output: Hello world!

Comments

Be the first to comment!