func GetInternalErrorCategory(err error) string {
	if errors.Is(err, context.Canceled) {
		return ErrCategoryCanceled
	}
	netErr, ok := err.(net.Error)
	if ok && netErr.Timeout() {
		return ErrCategoryTimeout
	}
	var dnsErr *net.DNSError
	if errors.As(err, &dnsErr) {
		return ErrCategoryDNS
	}
	var addrErr *net.AddrError
	if errors.As(err, &addrErr) {
		return ErrCategoryAddr
	}
	var opErr *net.OpError
	urlErr, ok := netErr.(*url.Error)
	if ok {
		opErr, _ = urlErr.Err.(*net.OpError)
	}
	if opErr == nil {
		opErr, ok = netErr.(*net.OpError)
		if !ok {
			return ""
		}
	}
	switch e := opErr.Err.(type) {
	case *os.SyscallError:
		if no, ok := e.Err.(syscall.Errno); ok {
			switch no {
			case syscall.ECONNREFUSED:
				return ErrCategoryRefused
			case syscall.ECONNABORTED:
				return ErrCategoryAborted
			case syscall.ECONNRESET:
				return ErrCategoryReset
			case syscall.ETIMEDOUT:
				return ErrCategoryTimeout
			}
		}
	}
	return ""
}
GetInternalErrorCategory get the category of net op error
package axios
import (
	"context"
	"encoding/json"
	"errors"
	"net"
	"net/url"
	"os"
	"syscall"
	"time"
)
const (
	ErrCategoryDNS      = "dns"
	ErrCategoryTimeout  = "timeout"
	ErrCategoryCanceled = "canceled"
	ErrCategoryAddr     = "addr"
	ErrCategoryAborted  = "aborted"
	ErrCategoryRefused  = "refused"
	ErrCategoryReset    = "reset"
)
const (
	ResultSuccess = iota
	ResultFail
)
type (
	JSONMarshal func(interface{}) ([]byte, error)
	JSONUnmarshal func([]byte, interface{}) error
)
var (
	defaultIns = NewInstance(&InstanceConfig{
		Timeout: time.Minute,
	})
	jsonMarshal = json.Marshal
	jsonUnmarshal = json.Unmarshal
)
func SetJSONMarshal(fn JSONMarshal) {
	jsonMarshal = fn
}
func SetJSONUnmarshal(fn JSONUnmarshal) {
	jsonUnmarshal = fn
}
func Request(config *Config) (resp *Response, err error) {
	return defaultIns.Request(config)
}
func Get(url string, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Get(url, query...)
}
func Delete(url string, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Delete(url, query...)
}
func Head(url string, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Head(url, query...)
}
func Options(url string, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Options(url, query...)
}
func Post(url string, data interface{}, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Post(url, data, query...)
}
func Put(url string, data interface{}, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Put(url, data, query...)
}
func Patch(url string, data interface{}, query ...url.Values) (resp *Response, err error) {
	return defaultIns.Patch(url, data, query...)
}
func GetDefaultInstance() *Instance {
	return defaultIns
}