package queue import ( "context" ) type MemoryQueue struct { ch chan Job } func NewMemoryQueue(size int) *MemoryQueue { return &MemoryQueue{ch: make(chan Job, size)} } func (q *MemoryQueue) Publish(_ context.Context, job Job) error { q.ch <- job return nil } func (q *MemoryQueue) StartConsumer(ctx context.Context, handler Handler) error { go func() { for { select { case <-ctx.Done(): return case job, ok := <-q.ch: if !ok { return } _ = handler(ctx, job) } } }() return nil } func (q *MemoryQueue) Close() error { close(q.ch) return nil }