package service import "errors" type Queue[T any] struct { msg []T } type popResult[T any] struct { value T err error } func NewQueue[T any]() *Queue[T] { return &Queue[T]{msg: make([]T, 256)} } func (q *Queue[T]) Push(msg T) { q.msg = append(q.msg, msg) } func (q *Queue[T]) Pop() (T, error) { if len(q.msg) == 0 { p := popResult[T]{err: errors.New("empty Queue")} return p.value, p.err } e, msg := q.msg[0], q.msg[1:] q.msg = msg return e, nil } func (q *Queue[T]) IsEmpty() bool { return len(q.msg) == 0 } func (q *Queue[T]) Size() int { return len(q.msg) }