39 lines
587 B
Go
39 lines
587 B
Go
![]() |
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)
|
||
|
}
|