func New(threads int, s Storage) (*Queue, error) {
	if s == nil {
		s = &InMemoryQueueStorage{MaxSize: 100000}
	}
	if err := s.Init(); err != nil {
		return nil, err
	}
	return &Queue{
		Threads: threads,
		storage: s,
		running: true,
	}, nil
}
New creates a new queue with a Storage specified in argument
A standard InMemoryQueueStorage is used if Storage argument is nil.
package queue
import (
	"net/url"
	"sync"
	"github.com/gocolly/colly/v2"
)
const stop = true
type Storage interface {
	Init() error
	AddRequest([]byte) error
	GetRequest() ([]byte, error)
	QueueSize() (int, error)
}
type Queue struct {
	Threads int
	storage Storage
	wake    chan struct{}
	mut     sync.Mutex  
	running bool
}
type InMemoryQueueStorage struct {
	MaxSize int
	lock    *sync.RWMutex
	size    int
	first   *inMemoryQueueItem
	last    *inMemoryQueueItem
}
type inMemoryQueueItem struct {
	Request []byte
	Next    *inMemoryQueueItem
}