Documentation
¶
Overview ¶
Package httpserver 提供基于 Gin 的 HTTP 服务封装。
支持直接使用 Gin 风格注册路由,也支持通过 typed handler 统一请求解码与响应编码。
基本使用:
srv := httpserver.NewServer(&httpserver.Config{
Port: 8080,
})
srv.GET("/healthz", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
Typed handler:
srv.POST("/login", httpserver.HandleJSON(login))
srv.POST("/upload", httpserver.HandleForm(upload, httpserver.WithMaxBodyBytes(100<<20)))
流式接口:
srv.SSE("/events", func(stream httpserver.SSEStream) {})
srv.WS("/chat", func(session httpserver.WSSession) {}, httpserver.WithWSAllowedOrigins("https://app.example.com"))
生命周期管理:
srv.Run() // 阻塞启动 srv.Start() // 非阻塞启动 srv.RunWithContext(ctx) // ctx 取消时执行优雅关闭 srv.RunWithGracefulShutdown() // 监听系统信号并优雅关闭 srv.WaitForShutdown() // 等待信号并优雅关闭
启动方法选择指南:
- 一般 Web 服务 → RunWithGracefulShutdown()(监听信号、自动 drain + shutdown)
- errgroup / 并发控制 → RunWithContext(ctx)(ctx 取消时自动优雅关闭)
- 单元/集成测试 → Start() + defer srv.Shutdown(ctx)(非阻塞启动)
- 自定义 listener(测试)→ Serve(ln)(阻塞,需自行管理关闭)
服务器状态:
srv.State() // 获取当前状态: new/starting/ready/draining/stopping/stopped/failed
srv.IsRunning() // 是否运行中 (ready 或 draining 状态)
srv.HealthAddr() // 获取健康检查地址
if err := srv.MarkReady(); err != nil {
// 非法状态迁移会返回错误,而不是 panic
}
优雅关闭配置:
srv := httpserver.NewServer(&httpserver.Config{
DrainTimeout: 5 * time.Second, // 收到关闭信号后等待时间,让负载均衡器切走流量
ShutdownTimeout: 10 * time.Second, // http.Server.Shutdown 的超时时间
// DrainTimeout: httpserver.DisableTimeout, // 显式关闭 drain 等待
// ShutdownTimeout: httpserver.DisableTimeout, // 显式关闭 shutdown deadline
})
自定义 http.Server 配置:
srv := httpserver.NewServer(cfg, httpserver.WithHTTPServerMutator(func(s *http.Server) {
s.MaxHeaderBytes = 1 << 20
}))
通用中间件:
srv.Use(middleware.Recovery())
srv.Use(middleware.Timeout(2 * time.Second))
srv.Use(middleware.CORS(middleware.CORSConfig{
AllowOrigins: []string{"https://app.example.com"},
}))
注意:
- `middleware.CORS(middleware.CORSConfig{})` 表示不启用 CORS
- 浏览器 WebSocket 握手默认拒绝,必须显式配置 `WithWSAllowedOrigins(...)` 或 `WithWSOriginChecker(...)`
- 如果挂了 `middleware.AccessLog(...)`,SSE/WS 会额外输出 `stream_connect` / `stream_disconnect` / `ws_upgrade_failed`
可观测性扩展:
prometheus.Register(public, prometheus.Config{Path: "/metrics"})
srv.Use(otel.Middleware(otel.Config{TracerName: "user-service"}))
官方默认装配:
srv := preset.NewProductionServer(nil) srv.Use(middleware.AccessLog()) // 后续 helper 路由会继承新增 middleware // srv.GET(...) 会走 regular helper group // srv.SSE(...) / srv.WS(...) 会走 streaming helper group(不自动挂 HandlerTimeout) // preset 是 transport baseline,不会自动配置 CORS、RealIP、AccessLog、认证或限流
Swagger 集成:
import (
_ "your/module/internal/docs"
httpswagger "github.com/tsopia/go-kit/httpserver/swagger"
)
public := srv.Group("")
httpswagger.Register(public, httpswagger.Config{})
更多信息请参考 README.md、httpserver/swagger/README.md 和 docs/httpserver.md
Index ¶
- Constants
- Variables
- func CORSMiddleware() gin.HandlerFunc
- func ComposeDecoder[Req any](decoders ...func(*gin.Context, *Req) error) func(*gin.Context, *Req) error
- func ContextFromGin(c *gin.Context) context.Context
- func DecodeForm[Req any]() func(*gin.Context, *Req) error
- func DecodeHeader[Req any]() func(*gin.Context, *Req) error
- func DecodeJSON[Req any]() func(*gin.Context, *Req) error
- func DecodeQuery[Req any]() func(*gin.Context, *Req) error
- func DecodeURI[Req any]() func(*gin.Context, *Req) error
- func DefaultHealthHandler() gin.HandlerFunc
- func GetRequestID(c *gin.Context) string
- func GetTraceID(c *gin.Context) string
- func Handle[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HandleForm[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HandleJSON[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HandleNoContent[Req any](fn ActionFunc[Req], opts ...HandlerOption) gin.HandlerFunc
- func HandleQuery[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HandleQueryURI[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HandleURI[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
- func HealthHandlerWithManager(manager *HealthCheckManager) gin.HandlerFunc
- func RealIPMiddleware() gin.HandlerFunc
- func RealIPMiddlewareWithConfig(config httpmiddleware.RealIPConfig) gin.HandlerFunc
- func RequestIDMiddleware() gin.HandlerFunc
- func TraceIDMiddleware() gin.HandlerFunc
- func WithWSPingPeriod(period time.Duration) wsOptionFunc
- func WithWSPongTimeout(timeout time.Duration) wsOptionFunc
- func WithWSSendBuffer(size int) wsOptionFunc
- type ActionFunc
- type Config
- type CustomHealthChecker
- type DatabaseHealthChecker
- type ErrorMapper
- type ErrorResponse
- type HTTPError
- type HTTPHealthChecker
- type HTTPServerMutator
- type HandlerFunc
- type HandlerOption
- func WithDecoder[Req any](decoder func(*gin.Context, *Req) error) HandlerOption
- func WithEncoder(encoder func(*gin.Context, int, any)) HandlerOption
- func WithErrorMapper(mapper ErrorMapper) HandlerOption
- func WithMaxBodyBytes(limit int64) HandlerOption
- func WithSuccessStatus(status int) HandlerOption
- func WithValidators[Req any](validators ...RequestValidator[Req]) HandlerOption
- type HealthCheckManager
- type HealthCheckOption
- type HealthChecker
- type HealthStatus
- type Hooks
- type LifecycleEvent
- type Option
- type RequestValidator
- type RouteModule
- type SSEHandlerFunc
- type SSEOption
- type SSESender
- type SSEStream
- type Server
- func (s *Server) Addr() string
- func (s *Server) Any(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) DELETE(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) EnableHealthCheck()
- func (s *Server) EnableHealthCheckWithManager(manager *HealthCheckManager)
- func (s *Server) Engine() *gin.Engine
- func (s *Server) Errors() <-chan error
- func (s *Server) GET(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) GetHealthCheckPath() string
- func (s *Server) Group(relativePath string, handlers ...gin.HandlerFunc) *gin.RouterGroup
- func (s *Server) HEAD(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) HealthAddr() string
- func (s *Server) IsRunning() bool
- func (s *Server) MarkDraining() error
- func (s *Server) MarkReady() error
- func (s *Server) OPTIONS(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) PATCH(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) POST(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) PUT(relativePath string, handlers ...gin.HandlerFunc)
- func (s *Server) RegisterModules(modules ...RouteModule)
- func (s *Server) RegisterRoutes(routes func(r *gin.Engine))
- func (s *Server) Run() error
- func (s *Server) RunTLS(certFile, keyFile string) error
- func (s *Server) RunWithContext(ctx context.Context) error
- func (s *Server) RunWithGracefulShutdown() error
- func (s *Server) SSE(relativePath string, handler SSEHandlerFunc, opts ...SSEOption)
- func (s *Server) Serve(ln net.Listener) error
- func (s *Server) SetGroups(regular, streaming *gin.RouterGroup)
- func (s *Server) SetHealthCheckPath(path string) error
- func (s *Server) Shutdown(ctx context.Context) error
- func (s *Server) Start() error
- func (s *Server) State() State
- func (s *Server) StreamingGroup(relativePath string, handlers ...gin.HandlerFunc) *gin.RouterGroup
- func (s *Server) Use(middleware ...gin.HandlerFunc)
- func (s *Server) WS(relativePath string, handler WSHandlerFunc, opts ...WSRouteOption)
- func (s *Server) WaitForShutdown() error
- type State
- type ValidationError
- type ValidationField
- type WSConfig
- type WSHandlerFunc
- type WSHub
- type WSMessage
- type WSOption
- type WSRouteConfig
- type WSRouteOption
- type WSSender
- type WSSession
Constants ¶
const (
DisableTimeout time.Duration = -1
)
Variables ¶
var ErrInvalidConfig = errors.New("invalid config")
ErrInvalidConfig 表示服务器配置不合法。
var ErrWSSessionClosed = errors.New("websocket session closed")
ErrWSSessionClosed 表示 WebSocket session 已关闭,不能再发送消息。
var WSUpgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: defaultWSOriginCheck,
}
WSUpgrader 是 WebSocket upgrader,可由用户自定义
Functions ¶
func ComposeDecoder ¶ added in v1.3.0
func ComposeDecoder[Req any](decoders ...func(*gin.Context, *Req) error) func(*gin.Context, *Req) error
ComposeDecoder 顺序执行多个 decoder。
func ContextFromGin ¶
ContextFromGin 从 Gin Context 提取 request context 这个 context 包含了 trace_id 和 request_id,可以用于创建 logger 示例用法:
ctx := httpserver.ContextFromGin(c)
logger := logger.FromContext(ctx)
logger.Info("处理用户请求") // 自动包含 trace_id 和 request_id
func DecodeForm ¶ added in v1.4.0
DecodeForm 使用 Gin 的 ShouldBind 填充请求对象(支持 JSON/Form/Multipart 自动识别)。
func DecodeHeader ¶ added in v1.4.0
DecodeHeader 使用 Header 填充请求对象。
func DecodeJSON ¶ added in v1.3.0
DecodeJSON 使用 JSON body 填充请求对象。
func DecodeQuery ¶ added in v1.3.0
DecodeQuery 使用 query string 填充请求对象。
func DefaultHealthHandler ¶ added in v1.0.2
func DefaultHealthHandler() gin.HandlerFunc
DefaultHealthHandler 默认健康检查处理器
func Handle ¶ added in v1.3.0
func Handle[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
Handle 将强类型业务函数适配成通用 HTTP handler。
func HandleForm ¶ added in v1.4.0
func HandleForm[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
HandleForm 将强类型业务函数适配成 form handler。 使用 Gin 的 ShouldBind,支持 JSON/Form/Multipart 自动识别。
func HandleJSON ¶ added in v1.3.0
func HandleJSON[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
HandleJSON 将强类型业务函数适配成 JSON HTTP handler。
func HandleNoContent ¶ added in v1.4.0
func HandleNoContent[Req any](fn ActionFunc[Req], opts ...HandlerOption) gin.HandlerFunc
HandleNoContent 将无响应体业务函数适配成 HTTP handler(默认 204)。
func HandleQuery ¶ added in v1.4.0
func HandleQuery[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
HandleQuery 将强类型业务函数适配成 query string handler。
func HandleQueryURI ¶ added in v1.4.0
func HandleQueryURI[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
HandleQueryURI 将强类型业务函数适配成 URI + query 组合解码 handler。
func HandleURI ¶ added in v1.4.0
func HandleURI[Req any, Resp any](fn HandlerFunc[Req, Resp], opts ...HandlerOption) gin.HandlerFunc
HandleURI 将强类型业务函数适配成 URI 参数 handler。
func HealthHandlerWithManager ¶ added in v1.0.2
func HealthHandlerWithManager(manager *HealthCheckManager) gin.HandlerFunc
HealthHandlerWithManager 带管理器的健康检查处理器
func RealIPMiddleware ¶ added in v1.4.0
func RealIPMiddleware() gin.HandlerFunc
RealIPMiddleware 可信客户端 IP 解析中间件 默认配置:不信任任何代理,直接使用 RemoteAddr
func RealIPMiddlewareWithConfig ¶ added in v1.4.0
func RealIPMiddlewareWithConfig(config httpmiddleware.RealIPConfig) gin.HandlerFunc
RealIPMiddlewareWithConfig 使用自定义配置的 RealIP 中间件
func RequestIDMiddleware ¶
func RequestIDMiddleware() gin.HandlerFunc
RequestIDMiddleware 添加 Request ID 的中间件(每个请求唯一)
func TraceIDMiddleware ¶
func TraceIDMiddleware() gin.HandlerFunc
TraceIDMiddleware 添加 Trace ID 的中间件
func WithWSPingPeriod ¶ added in v1.4.1
WithWSPingPeriod 设置 ping 发送周期
func WithWSPongTimeout ¶ added in v1.4.1
WithWSPongTimeout 设置 pong 超时时间
func WithWSSendBuffer ¶ added in v1.4.1
func WithWSSendBuffer(size int) wsOptionFunc
WithWSSendBuffer 设置发送队列大小。
Types ¶
type ActionFunc ¶ added in v1.4.0
ActionFunc 描述无响应体的业务处理函数。
type Config ¶
type Config struct {
Host string
Port int
ReadTimeout time.Duration
ReadHeaderTimeout time.Duration
WriteTimeout time.Duration
IdleTimeout time.Duration
MaxHeaderBytes int
ShutdownTimeout time.Duration
DrainTimeout time.Duration
EnableHealthCheck bool
HealthCheckPath string
ReadinessPath string
LivenessPath string
HealthCheckPort int
// HandlerTimeout 用于 preset 自动挂载的 Timeout 中间件。
//
// 重要:仅在 preset.NewProductionServer 中生效!
// 如果使用 NewServer 手动创建服务器,需要自行挂载:
// srv.Use(middleware.Timeout(duration))
// 必须小于 WriteTimeout 才能生效(否则 Validate 会返回错误)。
HandlerTimeout time.Duration
}
Config 服务器配置。
type CustomHealthChecker ¶ added in v1.0.2
type CustomHealthChecker struct {
// contains filtered or unexported fields
}
CustomHealthChecker 自定义健康检查器
func NewCustomHealthChecker ¶ added in v1.0.2
func NewCustomHealthChecker(name string, checker func(ctx context.Context) error) *CustomHealthChecker
NewCustomHealthChecker 创建自定义健康检查器
func (*CustomHealthChecker) CheckHealth ¶ added in v1.0.2
func (chc *CustomHealthChecker) CheckHealth(ctx context.Context) error
CheckHealth 执行自定义健康检查
func (*CustomHealthChecker) GetName ¶ added in v1.0.2
func (chc *CustomHealthChecker) GetName() string
GetName 获取检查器名称
type DatabaseHealthChecker ¶ added in v1.0.2
type DatabaseHealthChecker struct {
// contains filtered or unexported fields
}
DatabaseHealthChecker 数据库健康检查器
func NewDatabaseHealthChecker ¶ added in v1.0.2
func NewDatabaseHealthChecker(name string, db interface { Ping() error }) *DatabaseHealthChecker
NewDatabaseHealthChecker 创建数据库健康检查器
func (*DatabaseHealthChecker) CheckHealth ¶ added in v1.0.2
func (dhc *DatabaseHealthChecker) CheckHealth(ctx context.Context) error
CheckHealth 检查数据库健康状态
func (*DatabaseHealthChecker) GetName ¶ added in v1.0.2
func (dhc *DatabaseHealthChecker) GetName() string
GetName 获取检查器名称
type ErrorMapper ¶ added in v1.3.0
ErrorMapper 负责把业务错误映射成 HTTP 响应。
type ErrorResponse ¶ added in v1.4.0
type ErrorResponse struct {
Code string `json:"code"`
Message string `json:"message"`
Details map[string]any `json:"details,omitempty"`
}
ErrorResponse 描述 typed handler 的默认错误响应结构。
type HTTPError ¶ added in v1.4.0
type HTTPError interface {
error
StatusCode() int
ErrorCode() string
ErrorMessage() string
ErrorDetails() map[string]any
}
HTTPError 描述带有 HTTP 语义的业务错误。
type HTTPHealthChecker ¶ added in v1.0.2
type HTTPHealthChecker struct {
// contains filtered or unexported fields
}
HTTPHealthChecker HTTP服务健康检查器
func NewHTTPHealthChecker ¶ added in v1.0.2
func NewHTTPHealthChecker(name, url string, timeout time.Duration) *HTTPHealthChecker
NewHTTPHealthChecker 创建HTTP服务健康检查器
func (*HTTPHealthChecker) CheckHealth ¶ added in v1.0.2
func (hhc *HTTPHealthChecker) CheckHealth(ctx context.Context) (err error)
CheckHealth 检查HTTP服务健康状态
func (*HTTPHealthChecker) GetName ¶ added in v1.0.2
func (hhc *HTTPHealthChecker) GetName() string
GetName 获取检查器名称
type HTTPServerMutator ¶ added in v1.4.0
HTTPServerMutator 是修改 http.Server 的函数类型。
type HandlerFunc ¶ added in v1.3.0
HandlerFunc 描述强类型请求的业务处理函数。
type HandlerOption ¶ added in v1.3.0
type HandlerOption func(*handlerConfig)
HandlerOption 描述 handler 的可选配置。
func WithDecoder ¶ added in v1.3.0
func WithDecoder[Req any](decoder func(*gin.Context, *Req) error) HandlerOption
WithDecoder 覆盖默认请求解码器。
func WithEncoder ¶ added in v1.3.0
func WithEncoder(encoder func(*gin.Context, int, any)) HandlerOption
WithEncoder 覆盖成功响应编码器。
func WithErrorMapper ¶ added in v1.3.0
func WithErrorMapper(mapper ErrorMapper) HandlerOption
WithErrorMapper 为业务错误提供自定义映射。
func WithMaxBodyBytes ¶ added in v1.4.1
func WithMaxBodyBytes(limit int64) HandlerOption
WithMaxBodyBytes 限制请求体大小。
func WithSuccessStatus ¶ added in v1.3.0
func WithSuccessStatus(status int) HandlerOption
WithSuccessStatus 覆盖成功响应状态码。
func WithValidators ¶ added in v1.4.0
func WithValidators[Req any](validators ...RequestValidator[Req]) HandlerOption
WithValidators 为 typed handler 追加显式请求校验器。
type HealthCheckManager ¶ added in v1.0.2
type HealthCheckManager struct {
// contains filtered or unexported fields
}
HealthCheckManager 健康检查管理器
func NewHealthCheckManager ¶ added in v1.0.2
func NewHealthCheckManager(version string, opts ...HealthCheckOption) *HealthCheckManager
NewHealthCheckManager 创建健康检查管理器
func (*HealthCheckManager) AddChecker ¶ added in v1.0.2
func (hcm *HealthCheckManager) AddChecker(checker HealthChecker)
AddChecker 添加健康检查器
func (*HealthCheckManager) CheckHealth ¶ added in v1.0.2
func (hcm *HealthCheckManager) CheckHealth(ctx context.Context) *HealthStatus
CheckHealth 并发执行所有健康检查
type HealthCheckOption ¶ added in v1.4.0
type HealthCheckOption func(*HealthCheckManager)
HealthCheckOption 描述 HealthCheckManager 的可选配置。
func WithCheckTimeout ¶ added in v1.4.0
func WithCheckTimeout(timeout time.Duration) HealthCheckOption
WithCheckTimeout 设置单个 checker 的超时时间。
type HealthChecker ¶ added in v1.0.2
HealthChecker 健康检查器接口
type HealthStatus ¶ added in v1.0.2
type HealthStatus struct {
Status string `json:"status"` // healthy, unhealthy
Timestamp int64 `json:"timestamp"` // Unix时间戳
Version string `json:"version,omitempty"` // 应用版本
Uptime int64 `json:"uptime,omitempty"` // 运行时间(秒)
Checks map[string]interface{} `json:"checks,omitempty"` // 详细检查结果
Error string `json:"error,omitempty"` // 错误信息
}
HealthStatus 健康检查状态
type Hooks ¶ added in v1.3.0
type Hooks struct {
OnStarting func(context.Context, LifecycleEvent)
OnStarted func(context.Context, LifecycleEvent)
OnServeError func(context.Context, LifecycleEvent)
OnShuttingDown func(context.Context, LifecycleEvent)
OnShutdownComplete func(context.Context, LifecycleEvent)
// OnStateChange 在每次状态转换完成后同步调用。
// 调用时状态机锁已释放,可安全读取服务器状态。
// 注意:hook 会阻塞当前调用链,请确保其快速返回;
// 如需异步处理,请在 hook 内部自行开启 goroutine。
OnStateChange func(ctx context.Context, from State, to State)
}
Hooks 描述服务器生命周期的可选回调。
type LifecycleEvent ¶ added in v1.3.0
LifecycleEvent 描述服务器生命周期事件。
type Option ¶ added in v1.3.0
type Option func(*Server)
Option 描述 Server 的可选配置项。
func WithHTTPServerMutator ¶ added in v1.4.0
func WithHTTPServerMutator(mutator HTTPServerMutator) Option
WithHTTPServerMutator 注册一个在 http.Server 创建后、启动前调用的 mutator。 用于需要修改底层 http.Server 高级配置的场景。
func WithManualReadiness ¶ added in v1.4.0
func WithManualReadiness() Option
WithManualReadiness 禁用自动 ready 切换。
func WithModules ¶ added in v1.3.0
func WithModules(modules ...RouteModule) Option
WithModules 在构造时批量注册路由模块。
type RequestValidator ¶ added in v1.4.0
RequestValidator 描述 typed handler 的显式请求校验器。
type RouteModule ¶ added in v1.3.0
RouteModule 描述一组可注册到 Gin 路由树的模块。
type SSEHandlerFunc ¶ added in v1.4.1
type SSEHandlerFunc func(stream SSEStream)
SSEHandlerFunc 是 SSE handler 的函数签名。
type SSEOption ¶ added in v1.4.1
type SSEOption interface {
// contains filtered or unexported methods
}
SSEOption 是 SSE 路由的配置选项。
func WithHeartbeat ¶ added in v1.4.1
WithHeartbeat 启用 SSE 心跳保活。 interval 是心跳间隔,建议 30s-60s(小于 Nginx 默认 60s 超时)。 心跳格式为: `: ping 2026-03-23T10:15:30Z\n\n`
type SSESender ¶ added in v1.4.1
type SSESender interface {
Event(name string, data any) error
Data(data any) error
Comment(text string) error
}
SSESender 是 SSE 事件发送接口。
type SSEStream ¶ added in v1.4.1
type SSEStream interface {
SSESender
Context() context.Context
Request() *http.Request
Param(name string) string
}
SSEStream 描述 SSE handler 可见的请求与发送能力。
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server HTTP服务器 - 最小化封装
func (*Server) Any ¶
func (s *Server) Any(relativePath string, handlers ...gin.HandlerFunc)
Any 注册所有HTTP方法的便利方法
func (*Server) DELETE ¶
func (s *Server) DELETE(relativePath string, handlers ...gin.HandlerFunc)
DELETE 注册DELETE路由的便利方法
func (*Server) EnableHealthCheck ¶ added in v1.0.2
func (s *Server) EnableHealthCheck()
EnableHealthCheck 启用健康检查并注册默认健康检查路由。
func (*Server) EnableHealthCheckWithManager ¶ added in v1.0.2
func (s *Server) EnableHealthCheckWithManager(manager *HealthCheckManager)
EnableHealthCheckWithManager 启用带管理器的健康检查并注册探针路由。
func (*Server) GET ¶
func (s *Server) GET(relativePath string, handlers ...gin.HandlerFunc)
GET 注册GET路由的便利方法
func (*Server) GetHealthCheckPath ¶ added in v1.0.2
GetHealthCheckPath 获取健康检查路径
func (*Server) Group ¶
func (s *Server) Group(relativePath string, handlers ...gin.HandlerFunc) *gin.RouterGroup
Group 创建路由组的便利方法
func (*Server) HEAD ¶
func (s *Server) HEAD(relativePath string, handlers ...gin.HandlerFunc)
HEAD 注册HEAD路由的便利方法
func (*Server) HealthAddr ¶ added in v1.4.0
HealthAddr 返回健康检查服务器地址。 如果健康检查未启用,返回空字符串。 如果健康检查使用独立端口,返回独立地址;否则返回主服务器地址。
func (*Server) MarkDraining ¶ added in v1.4.0
MarkDraining 将服务器标记为排空中。
func (*Server) OPTIONS ¶
func (s *Server) OPTIONS(relativePath string, handlers ...gin.HandlerFunc)
OPTIONS 注册OPTIONS路由的便利方法
func (*Server) PATCH ¶
func (s *Server) PATCH(relativePath string, handlers ...gin.HandlerFunc)
PATCH 注册PATCH路由的便利方法
func (*Server) POST ¶
func (s *Server) POST(relativePath string, handlers ...gin.HandlerFunc)
POST 注册POST路由的便利方法
func (*Server) PUT ¶
func (s *Server) PUT(relativePath string, handlers ...gin.HandlerFunc)
PUT 注册PUT路由的便利方法
func (*Server) RegisterModules ¶ added in v1.3.0
func (s *Server) RegisterModules(modules ...RouteModule)
RegisterModules 批量注册路由模块。
func (*Server) RegisterRoutes ¶
RegisterRoutes 使用回调函数注册路由(推荐方式)
func (*Server) RunWithContext ¶ added in v1.4.0
RunWithContext 启动服务器,当 ctx 取消时自动优雅关闭(阻塞)。 适用于 errgroup 等并发控制场景。
func (*Server) RunWithGracefulShutdown ¶
RunWithGracefulShutdown 启动服务器并自动处理优雅关闭(阻塞)
func (*Server) SSE ¶ added in v1.4.1
func (s *Server) SSE(relativePath string, handler SSEHandlerFunc, opts ...SSEOption)
SSE 注册一个 Server-Sent Events 路由。 自动设置 SSE 响应头,清除 WriteDeadline,使用 streamingGroup(无 Timeout 中间件)。
func (*Server) SetGroups ¶ added in v1.4.1
func (s *Server) SetGroups(regular, streaming *gin.RouterGroup)
SetGroups 设置普通和流式路由组,由 preset 调用。
func (*Server) SetHealthCheckPath ¶ added in v1.0.2
SetHealthCheckPath 设置健康检查路径。 必须在健康检查路由注册或服务器启动前调用,否则返回错误。
func (*Server) StreamingGroup ¶ added in v1.4.1
func (s *Server) StreamingGroup(relativePath string, handlers ...gin.HandlerFunc) *gin.RouterGroup
StreamingGroup 创建一个流式路由组,用于 WebSocket 等长连接场景。 该组不会挂载 Timeout 中间件。
func (*Server) WS ¶ added in v1.4.1
func (s *Server) WS(relativePath string, handler WSHandlerFunc, opts ...WSRouteOption)
WS 注册一个 WebSocket 路由。 自动处理 Upgrade、ping/pong、缓冲策略和断开日志。
func (*Server) WaitForShutdown ¶
WaitForShutdown 等待关闭信号并执行优雅关闭
type ValidationError ¶ added in v1.4.0
type ValidationError struct {
Message string `json:"message"`
Fields []ValidationField `json:"fields,omitempty"`
}
ValidationError 描述结构化请求校验错误。
func (*ValidationError) Error ¶ added in v1.4.0
func (e *ValidationError) Error() string
type ValidationField ¶ added in v1.4.0
type ValidationField struct {
Field string `json:"field"`
Code string `json:"code,omitempty"`
Message string `json:"message"`
}
ValidationField 描述字段级校验错误。
type WSHandlerFunc ¶ added in v1.4.1
type WSHandlerFunc func(session WSSession)
WSHandlerFunc 是 WebSocket handler 的函数签名
type WSHub ¶ added in v1.4.1
type WSHub struct {
// contains filtered or unexported fields
}
WSHub 管理 WebSocket 连接的分组(如聊天室)
type WSOption ¶ added in v1.4.1
type WSOption interface {
// contains filtered or unexported methods
}
WSOption 是 WebSocket 配置选项
type WSRouteConfig ¶ added in v1.4.1
type WSRouteConfig struct {
WSConfig
ReadIdleTimeout time.Duration // 0 = 使用 PongTimeout
WriteTimeout time.Duration // 发送消息超时,0 = 无超时
CheckOrigin func(*http.Request) bool
}
WSRouteConfig 是 WebSocket 路由级配置
type WSRouteOption ¶ added in v1.4.1
type WSRouteOption interface {
// contains filtered or unexported methods
}
WSRouteOption 是 WebSocket 路由级配置选项
func WithReadIdleTimeout ¶ added in v1.4.1
func WithReadIdleTimeout(d time.Duration) WSRouteOption
WithReadIdleTimeout 设置读空闲超时。
func WithWSAllowedOrigins ¶ added in v1.4.1
func WithWSAllowedOrigins(origins ...string) WSRouteOption
WithWSAllowedOrigins 显式允许指定浏览器 Origin。 不带 Origin 的请求仍会放行,便于非浏览器客户端使用。
func WithWSOriginChecker ¶ added in v1.4.1
func WithWSOriginChecker(fn func(*http.Request) bool) WSRouteOption
WithWSOriginChecker 自定义 WebSocket Origin 校验逻辑。
func WithWriteTimeout ¶ added in v1.4.1
func WithWriteTimeout(d time.Duration) WSRouteOption
WithWriteTimeout 设置发送消息超时
type WSSender ¶ added in v1.4.1
WSSender 描述可以尝试发送 WebSocket 消息的能力。 WSSession 实现了此接口,可直接传递给 WSHub.Join/Leave。
type WSSession ¶ added in v1.4.1
type WSSession interface {
Context() context.Context
Request() *http.Request
Param(name string) string
Recv() <-chan WSMessage
Send(msg WSMessage) error
TrySend(msg WSMessage) bool
Close(code int, reason string) error
CloseGracefully(ctx context.Context, code int, reason string) error
}
WSSession 描述 WebSocket handler 可见的连接能力。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
integration
|
|
|
errorsx
Package errorsx 提供 errors 包与 httpserver typed handler 之间的桥接映射。
|
Package errorsx 提供 errors 包与 httpserver typed handler 之间的桥接映射。 |
|
Package middleware 提供可复用的 HTTP 中间件集合。
|
Package middleware 提供可复用的 HTTP 中间件集合。 |
|
observability
|
|
|
otel
Package otel 提供 HTTP tracing 中间件。
|
Package otel 提供 HTTP tracing 中间件。 |
|
prometheus
Package prometheus 提供 HTTP 指标中间件与 metrics 路由注册能力。
|
Package prometheus 提供 HTTP 指标中间件与 metrics 路由注册能力。 |
|
Package preset 提供官方推荐的 HTTP server 默认装配。
|
Package preset 提供官方推荐的 HTTP server 默认装配。 |
|
Package swagger 提供 Swagger UI 的 Gin 路由挂载能力。
|
Package swagger 提供 Swagger UI 的 Gin 路由挂载能力。 |