package responsex import ( "context" "fmt" ) type options struct { logger Logger ignoreLog bool traceId string defaultSuccessCode int defaultErrorCode int code int data any message string pagination *pagination } var op *options = nil func init() { op = defaultOptions() } func InitOptions(ops ...Option) { for _, o := range ops { o(op) } } func defaultOptions() *options { return &options{ logger: &defaultLogger{}, defaultSuccessCode: 200, defaultErrorCode: 400, code: 200, data: nil, // 默认为nil message: "请求成功", } } type Option func(*options) func SetCode(code int) Option { return func(o *options) { o.code = code } } func SetData(data any) Option { return func(o *options) { o.data = data } } func SetMessage(message string) Option { return func(o *options) { o.message = message } } func SetPage(page *pagination) Option { return func(o *options) { o.pagination = page } } // 设置默认的成功code func SetDefaultSuccessCode(code int) Option { return func(o *options) { o.defaultSuccessCode = code } } // 设置默认的失败code func SetDefaultErrorCode(code int) Option { return func(o *options) { o.defaultErrorCode = code } } // 是否需要打印日志 func SetIgnoreLog() Option { return func(o *options) { o.ignoreLog = true } } // 设置日志打印器 func SetLogger(logger Logger) Option { return func(o *options) { o.logger = logger } } // 是否需要响应trace_id,&ctx里面的字段 func SetTraceId(traceId string) Option { return func(o *options) { o.traceId = traceId } } // trace_id如何获取 type Logger interface { Info(ctx context.Context, args ...interface{}) Infof(ctx context.Context, format string, args ...interface{}) Error(ctx context.Context, args ...interface{}) Errorf(ctx context.Context, format string, args ...interface{}) } type defaultLogger struct{} func (d defaultLogger) Info(ctx context.Context, args ...interface{}) { fmt.Println(args...) } func (d *defaultLogger) Infof(ctx context.Context, format string, args ...interface{}) { fmt.Printf(format, args...) } func (d defaultLogger) Error(ctx context.Context, args ...interface{}) { fmt.Println(args...) } func (d *defaultLogger) Errorf(ctx context.Context, format string, args ...interface{}) { fmt.Printf(format, args...) }