func (w *Worker) Execute(ctx context.Context, req *http.Request, h func(resp *http.Response, err error) error) (err error) {
	j := &job{ctx, req, h, make(chan error)}
	w.jobQuene <- j
	return <-j.end
}
Execute exec http request
package requestwork
import (
	"context"
	"net/http"
	"net/url"
	"time"
)
type job struct {
	ctx     context.Context
	req     *http.Request
	handler func(resp *http.Response, err error) error
	end chan error
}
type result struct {
	resp *http.Response
	err  error
}
const DefaultMaxIdleConnPerHost = 20
func New(threads int) *Worker {
	tr := &http.Transport{
		Proxy:               NoProxyAllowed,
		MaxIdleConnsPerHost: threads * DefaultMaxIdleConnPerHost,
	}
	client := &http.Client{
		Transport: tr,
		Timeout:   time.Second * 60,
	}
	w := &Worker{
		jobQuene: make(chan *job),
		threads:  threads,
		tr:       tr,
		client:   client,
	}
	go w.start()
	return w
}
func NoProxyAllowed(request *http.Request) (*url.URL, error) {
	return nil, nil
}
type Worker struct {
	jobQuene chan *job
	threads  int
	tr       *http.Transport
	client   *http.Client
}