func New(errCode int, errMsg string, typ errorType) *Error {
	return &Error{
		Code: errCode,
		Msg:  errMsg,
		Typ:  typ,
	}
}
New returns a new error

framework error should be defined in framework, there's no need to export
'newError', users should only care about how to differentiate the error types
by errors.IsFrameworkError or errors.IsBusinessError.
package errors
import (
	"fmt"
)
type errorType int
const (
	errorTypeNil = errorType(iota)  
	Framework                       
	Business                        
)
func (t errorType) String() string {
	switch t {
	case errorTypeNil:
		return "nil"
	case Framework:
		return "framework error"
	case Business:
		return "business error"
	default:
		return "unknown error"
	}
}