package httpx import ( "reflect" "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v3" ) var validate = validator.New() func BindAndValidate(c fiber.Ctx, v any) error { // 1️⃣ 绑定 JSON if err := c.Bind().Body(v); err != nil { return err } // 2️⃣ 只允许 struct 校验(先不支持 slice) rv := reflect.ValueOf(v) if rv.Kind() == reflect.Ptr { rv = rv.Elem() } // 如果是 slice,直接跳过校验 if rv.Kind() == reflect.Slice { return nil } // 3️⃣ struct 校验 if err := validate.Struct(v); err != nil { return err } return nil }