Fiber 官方 Validation 文档很明确:
Bind可以绑定数据- 要做结构体验证,通常要在
fiber.Config里提供StructValidator
最常见做法是接 go-playground/validator/v10。
package main
import (
"log"
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v3"
)
type structValidator struct {
validate *validator.Validate
}
func (v *structValidator) Validate(out any) error {
return v.validate.Struct(out)
}
type CreateUserReq struct {
Name string `json:"name" validate:"required,min=2,max=50"`
Email string `json:"email" validate:"required,email"`
Age int `json:"age" validate:"gte=0,lte=120"`
}
func main() {
app := fiber.New(fiber.Config{
StructValidator: &structValidator{validate: validator.New()},
})
app.Post("/users", func(c fiber.Ctx) error {
req := new(CreateUserReq)
if err := c.Bind().Body(req); err != nil {
return err
}
return c.JSON(req)
})
log.Fatal(app.Listen(":3000"))
}这个机制的工程意义是:
请求进城
▼
Bind 把货卸到结构体
▼
StructValidator 验货
▼
合格才进业务区所以 Fiber 的真实心智不是“自动神奇校验”,而是:
你负责把验货口装上,Fiber 帮你把车导过去。