type Queue[T any] struct {
items []T
}
func (q *Queue[T]) Enqueue(t T) {
q.items = append(q.items, t)
}
func (q *Queue[T]) Dequeue() T {
t := q.items[0]
var zero T
q.items[0] = zero
q.items = q.items[1:]
return t
}
q := new(Queue[string])
q.Enqueue(x)
q.Enqueue(y)
z := q.Dequeue()
The generic type Queue works for any type parameter T