func New(config *Config) *Binding {
	if config == nil {
		config = new(Config)
	}
	b := &Binding{
		recvs:  make(map[uintptr]*receiver, 1024),
		config: *config,
	}
	b.config.init()
	b.vd = validator.New(b.config.Validator)
	return b.SetErrorFactory(nil, nil)
}
New creates a binding tool.
NOTE:
Use default tag name for config fields that are empty
package binding
import (
	jsonpkg "encoding/json"
	"mime/multipart"
	"net/http"
	"reflect"
	"strings"
	"sync"
	"github.com/henrylee2cn/ameda"
	"github.com/henrylee2cn/goutil"
	"github.com/bytedance/go-tagexpr/v2"
	"github.com/bytedance/go-tagexpr/v2/validator"
)
type Binding struct {
	vd             *validator.Validator
	recvs          map[uintptr]*receiver
	lock           sync.RWMutex
	bindErrFactory func(failField, msg string) error
	config         Config
}