func New() *Transformer {
	tc := new(tagCache)
	tc.m.Store(make(map[string]*cTag))
	sc := new(structCache)
	sc.m.Store(make(map[reflect.Type]*cStruct))
	return &Transformer{
		tagName:         "mold",
		aliases:         make(map[string]string),
		transformations: make(map[string]Func),
		interceptors:    make(map[reflect.Type]InterceptorFunc),
		cCache:          sc,
		tCache:          tc,
	}
}
New creates a new Transform object with default tag name of 'mold'
package mold
import (
	"context"
	"fmt"
	"reflect"
	"strings"
	"time"
)
var (
	timeType           = reflect.TypeOf(time.Time{})
	restrictedAliasErr = "Alias '%s' either contains restricted characters or is the same as a restricted tag needed for normal operation"
	restrictedTagErr   = "Tag '%s' either contains restricted characters or is the same as a restricted tag needed for normal operation"
)
type Transform interface {
	Struct(ctx context.Context, v interface{}) error
	Field(ctx context.Context, v interface{}, tags string) error
}
type Func func(ctx context.Context, fl FieldLevel) error
type StructLevelFunc func(ctx context.Context, sl StructLevel) error
type InterceptorFunc func(current reflect.Value) (inner reflect.Value)
type Transformer struct {
	tagName          string
	aliases          map[string]string
	transformations  map[string]Func
	structLevelFuncs map[reflect.Type]StructLevelFunc
	interceptors     map[reflect.Type]InterceptorFunc
	cCache           *structCache
	tCache           *tagCache
}