全书目录

第三十三篇:Fiber 完全指南 —— 极简高压快线城区宇宙

第十章:Validation —— 验货口不是自动存在的,要你自己装

1 分钟 187 字 第 621 / 962 个阅读单元

Fiber 官方 Validation 文档很明确:

  • Bind 可以绑定数据
  • 要做结构体验证,通常要在 fiber.Config 里提供 StructValidator

最常见做法是接 go-playground/validator/v10

go
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"))
}

这个机制的工程意义是:

text
请求进城
  ▼
Bind 把货卸到结构体
  ▼
StructValidator 验货
  ▼
合格才进业务区

所以 Fiber 的真实心智不是“自动神奇校验”,而是:

你负责把验货口装上,Fiber 帮你把车导过去。