Files
responsex/options.go
T
2026-07-22 01:17:07 +08:00

155 lines
2.8 KiB
Go

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
httpStatusCode int
headers map[string]string
}
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
}
}
// 设置HTTP状态码
func SetHttpStatusCode(code int) Option {
return func(o *options) {
o.httpStatusCode = code
}
}
// 设置单个响应头
func SetHeader(key, value string) Option {
return func(o *options) {
if o.headers == nil {
o.headers = make(map[string]string)
}
o.headers[key] = value
}
}
// 批量设置响应头
func SetHeaders(headers map[string]string) Option {
return func(o *options) {
o.headers = headers
}
}
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...)
}