Documentation
¶
Overview ¶
Package ginx 提供基于 Gin 的工业级解耦 HTTPS Server 组件库。
ginx 将 Gin 引擎完全封装在内部,对外暴露接口与配置,实现框架与业务的彻底解耦。 三方调用方无需直接依赖 Gin,仅需导入本包即可构建生产级 HTTPS 服务。
v0.2.0 起强制 TLS,支持 HTTP/2、HTTP/3 (QUIC) 和 Unix Socket 多通道同时监听。
Index ¶
- Constants
- func GracefulShutdown(ctx context.Context, logger Logger, httpServer *http.Server, ...) error
- type Config
- type Field
- type HandlerFunc
- type Logger
- type MiddlewareType
- type NoopLogger
- func (n NoopLogger) Debug(_ context.Context, _ string, _ ...Field)
- func (n NoopLogger) Error(_ context.Context, _ string, _ ...Field)
- func (n NoopLogger) Fatal(_ context.Context, _ string, _ ...Field)
- func (n NoopLogger) Info(_ context.Context, _ string, _ ...Field)
- func (n NoopLogger) Warn(_ context.Context, _ string, _ ...Field)
- type RateLimitOptions
- type Route
- type RouteGroup
- func (rg *RouteGroup) DELETE(path string, handler HandlerFunc, mw ...HandlerFunc)
- func (rg *RouteGroup) GET(path string, handler HandlerFunc, mw ...HandlerFunc)
- func (rg *RouteGroup) Group(relativePath string) *RouteGroup
- func (rg *RouteGroup) PATCH(path string, handler HandlerFunc, mw ...HandlerFunc)
- func (rg *RouteGroup) POST(path string, handler HandlerFunc, mw ...HandlerFunc)
- func (rg *RouteGroup) PUT(path string, handler HandlerFunc, mw ...HandlerFunc)
- func (rg *RouteGroup) Use(middleware ...HandlerFunc)
- type Server
- func (s *Server) DisableMiddleware(mt ...MiddlewareType) *Server
- func (s *Server) DisableRateLimit() *Server
- func (s *Server) EnableMiddleware(mt ...MiddlewareType) *Server
- func (s *Server) EnableRateLimit(opts RateLimitOptions) *Server
- func (s *Server) EnableSPA(filesys http.FileSystem, indexPath string) *Server
- func (s *Server) ListenerAddr() string
- func (s *Server) OverrideMiddleware(mt MiddlewareType, mw HandlerFunc) *Server
- func (s *Server) RegisterRoute(r Route) *Server
- func (s *Server) RegisterRouteGroup(prefix string, fn func(*RouteGroup)) *Server
- func (s *Server) RegisterRoutes(routes []Route) *Server
- func (s *Server) ServeStaticDir(prefix, root string) *Server
- func (s *Server) ServeStaticFS(prefix string, filesys http.FileSystem) *Server
- func (s *Server) Start() error
- func (s *Server) Stop(ctx context.Context) error
- func (s *Server) UseGlobalMiddleware(mw ...HandlerFunc) *Server
- func (s *Server) UseHttp2Listen(addr string) *Server
- func (s *Server) UseHttp3Listen(addr string) *Server
- func (s *Server) UseUnixSocketListen(path string, perm os.FileMode) *Server
- func (s *Server) WithLogger(l Logger) *Server
- type StandardizedResponse
Constants ¶
const ( // CodeSuccess 表示请求成功。 CodeSuccess = 0 // CodeBadRequest 表示请求参数校验失败。 CodeBadRequest = 400 // CodeNotFound 表示请求的资源不存在。 CodeNotFound = 404 // CodeMethodNotAllowed 表示不支持的请求方法。 CodeMethodNotAllowed = 405 // CodeTooManyRequests 表示请求频率超限。 CodeTooManyRequests = 429 // CodeInternalError 表示服务器内部错误。 CodeInternalError = 500 CodeServiceUnavailable = 503 )
HTTP 状态码常量。
Variables ¶
This section is empty.
Functions ¶
func GracefulShutdown ¶
func GracefulShutdown( ctx context.Context, logger Logger, httpServer *http.Server, listener net.Listener, shutdownTimeout time.Duration, unixSocketPath string, cleanupFuncs []func(), ) error
GracefulShutdown 监听系统信号并执行优雅关闭。
收到 SIGINT 或 SIGTERM 后,调用 httpServer.Shutdown(ctx) 排空请求, 清理 Unix Socket 文件(如适用),最后调用 cleanup 函数。 返回 nil 表示正常关闭,返回 error 表示关闭超时或异常。
注意:v0.2.0 起,此函数仅作为公开 API 保留,Server.Start() 内部已内联信号处理。 调用方如需自定义关闭逻辑可使用此函数。
Types ¶
type Config ¶
type Config struct {
// TLSCertFile TLS 证书文件路径(PEM 格式),必填。
// 文件必须存在且为普通文件(不可为目录)。
TLSCertFile string
// TLSKeyFile TLS 私钥文件路径(PEM 格式),必填。
// 文件必须存在且为普通文件(不可为目录)。
TLSKeyFile string
// ReadTimeout HTTP 读取超时时间。
ReadTimeout time.Duration
// WriteTimeout HTTP 写入超时时间。
WriteTimeout time.Duration
// IdleTimeout HTTP 空闲连接超时时间。
IdleTimeout time.Duration
// RequestTimeout 单个请求的超时时间,由 Timeout 中间件使用。
RequestTimeout time.Duration
// ShutdownTimeout 优雅关闭的最大等待时间。
ShutdownTimeout time.Duration
// MaxHeaderBytes 请求头的最大字节数。
MaxHeaderBytes int
// HealthPath 健康检查端点路径,默认为 "/health"。
HealthPath string
// LogLevel 日志级别,可选 "debug"、"info"、"warn"、"error",为空则默认 "info"。
LogLevel string
// LogSuccessReq 是否记录成功请求的日志。
LogSuccessReq bool
// CORSAllowedOrigins CORS 允许的来源列表。
CORSAllowedOrigins []string
// CORSAllowedMethods CORS 允许的 HTTP 方法列表。
CORSAllowedMethods []string
// CORSAllowedHeaders CORS 允许的请求头列表。
CORSAllowedHeaders []string
// CORSMaxAge CORS 预检请求的缓存时间。
CORSMaxAge time.Duration
// MiddlewareRequestID 是否启用 RequestID 中间件。
MiddlewareRequestID bool
// MiddlewareCORS 是否启用 CORS 中间件。
MiddlewareCORS bool
// MiddlewareTimeout 是否启用 Timeout 中间件。
MiddlewareTimeout bool
// MiddlewareRecovery 是否启用 Recovery 中间件。
MiddlewareRecovery bool
// MiddlewareValidation 是否启用 Validation 中间件。
MiddlewareValidation bool
}
Config 定义 ginx Server 的全部配置项。
配置由调用方显式构造后传入 NewServer,ginx 不提供 DefaultConfig()。 所有校验在 Validate() 中集中进行,失败返回简体中文错误消息。
type HandlerFunc ¶
type HandlerFunc = gin.HandlerFunc
HandlerFunc 是 gin.HandlerFunc 的类型别名。
这是 ginx 暴露的唯一 Gin 类型,调用方无需直接导入 Gin。
type Logger ¶
type Logger interface {
// Debug 记录调试级别日志。
Debug(ctx context.Context, msg string, fields ...Field)
// Info 记录信息级别日志。
Info(ctx context.Context, msg string, fields ...Field)
// Warn 记录警告级别日志。
Warn(ctx context.Context, msg string, fields ...Field)
// Error 记录错误级别日志。
Error(ctx context.Context, msg string, fields ...Field)
// Fatal 记录致命级别日志。
Fatal(ctx context.Context, msg string, fields ...Field)
}
Logger 定义 ginx 的日志接口。
调用方通过实现此接口注入自定义日志组件(如 Zap、Zerolog)。 默认使用 NoopLogger,所有方法为空实现,编译器内联,零分配。
type MiddlewareType ¶
type MiddlewareType string
MiddlewareType 标识内置中间件的类型。
const ( // MiddlewareRequestID 请求 ID 生成中间件。 MiddlewareRequestID MiddlewareType = "request_id" // MiddlewareCORS 跨域处理中间件。 MiddlewareCORS MiddlewareType = "cors" // MiddlewareTimeout 请求超时中间件。 MiddlewareTimeout MiddlewareType = "timeout" // MiddlewareRecovery Panic 捕获中间件。 MiddlewareRecovery MiddlewareType = "recovery" // MiddlewareValidation 请求参数校验中间件。 MiddlewareValidation MiddlewareType = "validation" // MiddlewareRateLimit IP 令牌桶限流中间件。 MiddlewareRateLimit MiddlewareType = "rate_limit" )
type NoopLogger ¶
type NoopLogger struct{}
NoopLogger 是 Logger 接口的空实现,所有方法不执行任何操作。
编译器会将 NoopLogger 的方法内联,确保零分配开销。 当调用方未注入自定义 Logger 时,Server 默认使用此实现。
func (NoopLogger) Debug ¶
func (n NoopLogger) Debug(_ context.Context, _ string, _ ...Field)
Debug 空实现。
func (NoopLogger) Error ¶
func (n NoopLogger) Error(_ context.Context, _ string, _ ...Field)
Error 空实现。
func (NoopLogger) Fatal ¶
func (n NoopLogger) Fatal(_ context.Context, _ string, _ ...Field)
Fatal 空实现。
type RateLimitOptions ¶
type RateLimitOptions struct {
// QPS 每 IP 每秒允许的请求数(必填,> 0)。
QPS int
// Window 限流窗口时长(必填,> 0)。
Window time.Duration
// Whitelist 白名单 IP/CIDR 列表(可选)。
Whitelist []string
// CleanupInterval 过期桶清理间隔(可选,0 = 默认 5 分钟)。
CleanupInterval time.Duration
}
RateLimitOptions 定义 IP 限流中间件的配置参数。
type Route ¶
type Route struct {
// Method HTTP 方法,如 GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS。
Method string
// Path 路由路径,如 "/api/users/:id"。
Path string
// Handler 路由处理器。
Handler HandlerFunc
// Middleware 路由专属中间件(可选),仅对当前路由生效。
Middleware []HandlerFunc
}
Route 定义一条 HTTP 路由。
type RouteGroup ¶
type RouteGroup struct {
// contains filtered or unexported fields
}
RouteGroup 路由分组,支持嵌套分组和分组级中间件。
RouteGroup 仅缓冲注册,Start() 时一次性挂载到 Gin 引擎。
func (*RouteGroup) DELETE ¶
func (rg *RouteGroup) DELETE(path string, handler HandlerFunc, mw ...HandlerFunc)
DELETE 注册一条 DELETE 方法路由。
func (*RouteGroup) GET ¶
func (rg *RouteGroup) GET(path string, handler HandlerFunc, mw ...HandlerFunc)
GET 注册一条 GET 方法路由。
func (*RouteGroup) Group ¶
func (rg *RouteGroup) Group(relativePath string) *RouteGroup
Group 创建一个子分组,子分组继承父分组的 prefix 和中间件。
func (*RouteGroup) PATCH ¶
func (rg *RouteGroup) PATCH(path string, handler HandlerFunc, mw ...HandlerFunc)
PATCH 注册一条 PATCH 方法路由。
func (*RouteGroup) POST ¶
func (rg *RouteGroup) POST(path string, handler HandlerFunc, mw ...HandlerFunc)
POST 注册一条 POST 方法路由。
func (*RouteGroup) PUT ¶
func (rg *RouteGroup) PUT(path string, handler HandlerFunc, mw ...HandlerFunc)
PUT 注册一条 PUT 方法路由。
func (*RouteGroup) Use ¶
func (rg *RouteGroup) Use(middleware ...HandlerFunc)
Use 向当前分组追加中间件,影响该分组内所有已注册和后续注册的路由。
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server 是 ginx 的核心类型,封装 Gin 引擎并提供工业级 HTTPS Server 能力。
通过链式 API 进行配置,调用 Start() 启动服务,Stop(ctx) 优雅关闭。 v0.2.0 起支持 HTTP/2、HTTP/3 (QUIC) 和 Unix Socket 多通道同时监听。
func (*Server) DisableMiddleware ¶
func (s *Server) DisableMiddleware(mt ...MiddlewareType) *Server
DisableMiddleware 禁用指定类型的内置中间件。
func (*Server) DisableRateLimit ¶
DisableRateLimit 禁用 IP 限流中间件。
func (*Server) EnableMiddleware ¶
func (s *Server) EnableMiddleware(mt ...MiddlewareType) *Server
EnableMiddleware 重新启用指定类型的内置中间件(RateLimit 除外)。
func (*Server) EnableRateLimit ¶
func (s *Server) EnableRateLimit(opts RateLimitOptions) *Server
EnableRateLimit 启用 IP 限流中间件。
func (*Server) EnableSPA ¶
func (s *Server) EnableSPA(filesys http.FileSystem, indexPath string) *Server
EnableSPA 启用 SPA 回退模式。
启用后,未匹配到任何路由的 GET/HEAD 请求将返回指定的 index 文件, 而非标准的 JSON 404 响应。非 GET/HEAD 请求仍返回标准 JSON 错误。
indexPath 是相对于 fs 的文件路径,通常为 "index.html"。 重复调用会覆盖之前的配置。
使用示例:
s.ServeStaticFS("/", http.FS(distFS))
s.EnableSPA(http.FS(distFS), "index.html")
func (*Server) ListenerAddr ¶
ListenerAddr 返回第一个 Listener 的监听地址,线程安全。
当使用 port 0 动态分配端口时,可通过此方法获取实际监听端口。 若尚未创建任何 Listener,返回空字符串。
func (*Server) OverrideMiddleware ¶
func (s *Server) OverrideMiddleware(mt MiddlewareType, mw HandlerFunc) *Server
OverrideMiddleware 使用自定义 Handler 覆盖指定类型的内置中间件。
func (*Server) RegisterRoute ¶
RegisterRoute 注册单条路由。
func (*Server) RegisterRouteGroup ¶
func (s *Server) RegisterRouteGroup(prefix string, fn func(*RouteGroup)) *Server
RegisterRouteGroup 注册路由分组。
fn 在 Start() 时被调用以展开分组内路由。
func (*Server) RegisterRoutes ¶
RegisterRoutes 批量注册路由。
func (*Server) ServeStaticDir ¶
ServeStaticDir 从本地目录提供静态文件。
等价于 gin.Engine.Static(prefix, root)。 root 必须是本地文件系统上已存在的目录。
func (*Server) ServeStaticFS ¶
func (s *Server) ServeStaticFS(prefix string, filesys http.FileSystem) *Server
ServeStaticFS 从 http.FileSystem 提供静态文件。
配合 Go embed 包使用可将前端资源嵌入二进制:
//go:embed all:frontend/dist
var spaAssets embed.FS
distFS, _ := fs.Sub(spaAssets, "frontend/dist")
s.ServeStaticFS("/", http.FS(distFS))
等价于 gin.Engine.StaticFS(prefix, fs)。
func (*Server) UseGlobalMiddleware ¶
func (s *Server) UseGlobalMiddleware(mw ...HandlerFunc) *Server
UseGlobalMiddleware 追加外部全局中间件。
func (*Server) UseHttp2Listen ¶
UseHttp2Listen 启用 HTTP/2 TLS 监听(含 HTTP/1.1 兼容)。
addr 格式如 ":443" 或 "0.0.0.0:8888"。
func (*Server) UseHttp3Listen ¶
UseHttp3Listen 启用 HTTP/3 QUIC 监听。
addr 独立指定,与 HTTP/2 无关。格式如 ":443" 或 "127.0.0.1:9900"。
func (*Server) UseUnixSocketListen ¶
UseUnixSocketListen 启用 Unix Socket 监听。
perm 为 Socket 文件权限,为 0 则默认 0660。
func (*Server) WithLogger ¶
WithLogger 注入自定义 Logger 实现。
type StandardizedResponse ¶
type StandardizedResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data any `json:"data,omitempty"`
RequestID string `json:"requestId"`
Timestamp int64 `json:"timestamp"`
}
StandardizedResponse 是 ginx 统一的标准 JSON 响应体。
所有正常响应和异常兜底(404/405/429/500/503)均使用此结构。 msg 字段使用简体中文。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package middleware 提供 ginx 内置的 HTTP 中间件实现。
|
Package middleware 提供 ginx 内置的 HTTP 中间件实现。 |