Documentation
¶
Index ¶
- Constants
- Variables
- func APIHidden(op *Operation)
- func DefaultErrorHandler(c *Ctx, err error) error
- func DefaultSchemaNamer(t reflect.Type, hint string) string
- func SupportedLanguages() []language.Tag
- type API
- type AddOperation
- type Claims
- type ClaimsValidator
- type Components
- type Config
- type Ctx
- func (c *Ctx) AddURI(key, value string) *Ctx
- func (c *Ctx) Content(value string) *Ctx
- func (c *Ctx) Cookie(name string) (string, error)
- func (c *Ctx) Deadline() (time.Time, bool)
- func (c *Ctx) Done() <-chan struct{}
- func (c *Ctx) Err() error
- func (c *Ctx) Get(key any, value ...any) any
- func (c *Ctx) GetHeader(key string, value ...string) string
- func (c *Ctx) Gin() *gin.Context
- func (c *Ctx) Header(key string, value string) *Ctx
- func (c *Ctx) IP() string
- func (c *Ctx) Method() string
- func (c *Ctx) Next() error
- func (c *Ctx) Param(key string, def ...any) string
- func (c *Ctx) ParamAny(key string, def ...any) any
- func (c *Ctx) ParamArray(key string) []string
- func (c *Ctx) ParamBool(key string, def ...any) bool
- func (c *Ctx) ParamDuration(key string, def ...any) time.Duration
- func (c *Ctx) ParamFile(key string) (*multipart.FileHeader, error)
- func (c *Ctx) ParamFloat32(key string, def ...any) float32
- func (c *Ctx) ParamFloat64(key string, def ...any) float64
- func (c *Ctx) ParamInt(key string, def ...any) int
- func (c *Ctx) ParamInt16(key string, def ...any) int16
- func (c *Ctx) ParamInt32(key string, def ...any) int32
- func (c *Ctx) ParamInt64(key string, def ...any) int64
- func (c *Ctx) ParamInt8(key string, def ...any) int8
- func (c *Ctx) ParamMap(key string) map[string]string
- func (c *Ctx) ParamTime(key string, def ...any) time.Time
- func (c *Ctx) ParamUint(key string, def ...any) uint
- func (c *Ctx) ParamUint16(key string, def ...any) uint16
- func (c *Ctx) ParamUint32(key string, def ...any) uint32
- func (c *Ctx) ParamUint64(key string, def ...any) uint64
- func (c *Ctx) ParamUint8(key string, def ...any) uint8
- func (c *Ctx) Params() map[string]any
- func (c *Ctx) Path(full ...bool) string
- func (c *Ctx) RawBody() (body []byte)
- func (c *Ctx) RemoteIP() string
- func (c *Ctx) SaveFile(file *multipart.FileHeader, dst string) error
- func (c *Ctx) Send(body any) error
- func (c *Ctx) SendBytes(data []byte) error
- func (c *Ctx) SendFile(file string, name ...string) error
- func (c *Ctx) SendHTML(name string, data any) error
- func (c *Ctx) SendJSON(data any) error
- func (c *Ctx) SendReader(reader io.Reader, size int64, extraHeaders ...map[string]string) error
- func (c *Ctx) SendRedirect(loc string) error
- func (c *Ctx) SendSSEvent(name string, message any) error
- func (c *Ctx) SendStream(step func(w io.Writer) bool) bool
- func (c *Ctx) SendTOML(data any) error
- func (c *Ctx) SendText(data any) error
- func (c *Ctx) SendXML(data any) error
- func (c *Ctx) SendYAML(data any) error
- func (c *Ctx) SetCookie(name, value, path, domain string, maxAge int, secure, httpOnly bool, ...) *Ctx
- func (c *Ctx) Status(code int) *Ctx
- func (c *Ctx) StatusCode() int
- func (c *Ctx) TraceID() string
- func (c *Ctx) URI(key string) string
- func (c *Ctx) Value(key any) any
- type Engine
- type Error
- func ErrBadGateway(msg ...string) *Error
- func ErrBadRequest(msg ...string) *Error
- func ErrConflict(msg ...string) *Error
- func ErrEntityTooLarge(msg ...string) *Error
- func ErrExpectationFailed(msg ...string) *Error
- func ErrFailedDependency(msg ...string) *Error
- func ErrForbidden(msg ...string) *Error
- func ErrGatewayTimeout(msg ...string) *Error
- func ErrGone(msg ...string) *Error
- func ErrHTTPVersionNotSupported(msg ...string) *Error
- func ErrHeaderFieldsTooLarge(msg ...string) *Error
- func ErrInsufficientStorage(msg ...string) *Error
- func ErrInternalServerError(msg ...string) *Error
- func ErrLengthRequired(msg ...string) *Error
- func ErrLocked(msg ...string) *Error
- func ErrLoopDetected(msg ...string) *Error
- func ErrMethodNotAllowed(msg ...string) *Error
- func ErrMisdirectedRequest(msg ...string) *Error
- func ErrNetworkAuthenticationRequired(msg ...string) *Error
- func ErrNotAcceptable(msg ...string) *Error
- func ErrNotExtended(msg ...string) *Error
- func ErrNotFound(msg ...string) *Error
- func ErrNotImplemented(msg ...string) *Error
- func ErrPaymentRequired(msg ...string) *Error
- func ErrPreconditionFailed(msg ...string) *Error
- func ErrPreconditionRequired(msg ...string) *Error
- func ErrProxyAuthRequired(msg ...string) *Error
- func ErrRangeNotSatisfiable(msg ...string) *Error
- func ErrServiceUnavailable(msg ...string) *Error
- func ErrTeapot(msg ...string) *Error
- func ErrTimeout(msg ...string) *Error
- func ErrTooEarly(msg ...string) *Error
- func ErrTooManyRequests(msg ...string) *Error
- func ErrURITooLong(msg ...string) *Error
- func ErrUnauthorized(msg ...string) *Error
- func ErrUnavailableForLegalReasons(msg ...string) *Error
- func ErrUnprocessableEntity(msg ...string) *Error
- func ErrUnsupportedMediaType(msg ...string) *Error
- func ErrUpgradeRequired(msg ...string) *Error
- func ErrVariantAlsoNegotiates(msg ...string) *Error
- func NewError(code int, msg ...string) *Error
- func NotModified(msg ...string) *Error
- type Field
- type HandleArg
- type HandleMeta
- type Handler
- type IRouter
- type Info
- type JWT
- func (j *JWT[T]) Auth(failure func(*Ctx, *jwt.Token, error) error, opts ...jwt.ParserOption) Handler
- func (j *JWT[T]) Issue(data T, opts ...jwt.TokenOption) (string, error)
- func (j *JWT[T]) IssueWith(data T, setup func(*Claims[T]), opts ...jwt.TokenOption) (string, error)
- func (j *JWT[T]) Parse(signed string, opts ...jwt.ParserOption) (*Claims[T], *jwt.Token, error)
- func (j *JWT[T]) Token(gc *gin.Context) string
- type MediaType
- type OpenAPI
- type Operation
- type Param
- type PathItem
- type RecoverInfo
- type Registry
- func (r *Registry) DecodeJSON(value, field string, s *Schema) any
- func (r *Registry) Field(f reflect.StructField, hint string) (s *Schema)
- func (r *Registry) MarshalYAML() (any, error)
- func (r *Registry) Ref(ref string) *Schema
- func (r *Registry) Schema(t reflect.Type, hint ...string) *Schema
- func (r *Registry) Struct(t reflect.Type, hint ...string) *Schema
- type RequestBody
- type Requirement
- type ResponseBody
- type Result
- func (r *Result) Failed(data ...any) (res *Result)
- func (r *Result) NewFailed(data ...any) *Result
- func (r *Result) OK(data ...any) (res *Result)
- func (r *Result) SetCode(code any) *Result
- func (r *Result) SetEvent(e string) *Result
- func (r *Result) SetMsg(format any, a ...any) *Result
- func (r *Result) SetStatus(status any, code ...any) (res *Result)
- type Router
- func (r *Router) Any(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) DELETE(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) GET(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) Group(path string, ops ...AddOperation) IRouter
- func (r *Router) HEAD(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) Handle(method, path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) Match(methods []string, path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) OPTIONS(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) PATCH(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) POST(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) PUT(path string, h Handler, ops ...AddOperation) IRouter
- func (r *Router) Static(path, root string) IRouter
- func (r *Router) StaticFS(name string, root http.FileSystem) IRouter
- func (r *Router) StaticFile(name, root string) IRouter
- func (r *Router) StaticFileFS(name, root string, fs http.FileSystem) IRouter
- func (r *Router) Use(handlers ...Handler) IRouter
- type Schema
- type SecurityScheme
- type Stack
- type Tag
Constants ¶
const ( MIMETextHTML = "text/html" MIMETextPlain = "text/plain" MIMETextXML = "text/xml" MIMETextJavaScript = "text/javascript" MIMETextCSS = "text/css" MIMEYAML = "application/yaml" MIMEYAMLX = "application/x-yaml" MIMEXML = "application/xml" MIMETOML = "application/toml" MIMEJSON = "application/json" MIMEJavaScript = "application/javascript" MIMEForm = "application/x-www-form-urlencoded" MIMEOctetStream = "application/octet-stream" MIMEMultipartForm = "multipart/form-data" )
MIME types that are commonly used
const ( HeaderAuthorization = "Authorization" HeaderProxyAuthenticate = "Proxy-Authenticate" HeaderProxyAuthorization = "Proxy-Authorization" HeaderWWWAuthenticate = "WWW-Authenticate" HeaderAge = "Age" HeaderCacheControl = "Cache-Control" HeaderClearSiteData = "Clear-Site-Data" HeaderExpires = "Expires" HeaderPragma = "Pragma" HeaderWarning = "Warning" HeaderAcceptCH = "Accept-CH" HeaderAcceptCHLifetime = "Accept-CH-Lifetime" HeaderContentDPR = "Content-DPR" HeaderDPR = "DPR" HeaderEarlyData = "Early-Data" HeaderSaveData = "Save-Data" HeaderViewportWidth = "Viewport-Width" HeaderWidth = "Width" HeaderETag = "ETag" HeaderIfMatch = "If-Match" HeaderIfModifiedSince = "If-Modified-Since" HeaderIfNoneMatch = "If-None-Match" HeaderIfUnmodifiedSince = "If-Unmodified-Since" HeaderLastModified = "Last-Modified" HeaderVary = "Vary" HeaderConnection = "Connection" HeaderKeepAlive = "Keep-Alive" HeaderAccept = "Accept" HeaderAcceptCharset = "Accept-Charset" HeaderAcceptEncoding = "Accept-Encoding" HeaderAcceptLanguage = "Accept-Language" HeaderCookie = "Cookie" HeaderExpect = "Expect" HeaderMaxForwards = "Max-Forwards" HeaderSetCookie = "Set-Cookie" HeaderAccessControlAllowCredentials = "Access-Control-Allow-Credentials" HeaderAccessControlAllowHeaders = "Access-Control-Allow-Headers" HeaderAccessControlAllowMethods = "Access-Control-Allow-Methods" HeaderAccessControlAllowOrigin = "Access-Control-Allow-Origin" HeaderAccessControlExposeHeaders = "Access-Control-Expose-Headers" HeaderAccessControlMaxAge = "Access-Control-Max-Age" HeaderAccessControlRequestHeaders = "Access-Control-Request-Headers" HeaderAccessControlRequestMethod = "Access-Control-Request-Method" HeaderOrigin = "Origin" HeaderTimingAllowOrigin = "Timing-Allow-Origin" HeaderXPermittedCrossDomainPolicies = "X-Permitted-Cross-Domain-Policies" HeaderDNT = "DNT" HeaderTk = "Tk" HeaderContentDisposition = "Content-Disposition" HeaderContentEncoding = "Content-Encoding" HeaderContentLanguage = "Content-Language" HeaderContentLength = "Content-Length" HeaderContentLocation = "Content-Location" HeaderContentType = "Content-Type" HeaderForwarded = "Forwarded" HeaderVia = "Via" HeaderXForwardedFor = "X-Forwarded-For" HeaderXForwardedHost = "X-Forwarded-Host" HeaderXForwardedProto = "X-Forwarded-Proto" HeaderXForwardedProtocol = "X-Forwarded-Protocol" HeaderXForwardedSsl = "X-Forwarded-Ssl" HeaderXUrlScheme = "X-Url-Scheme" HeaderLocation = "Location" HeaderFrom = "From" HeaderHost = "Host" HeaderReferer = "Referer" HeaderReferrerPolicy = "Referrer-Policy" HeaderUserAgent = "User-Agent" HeaderAllow = "Allow" HeaderServer = "Server" HeaderAcceptRanges = "Accept-Ranges" HeaderContentRange = "Content-Range" HeaderIfRange = "If-Range" HeaderRange = "Range" HeaderContentSecurityPolicy = "Content-Security-Policy" HeaderContentSecurityPolicyReportOnly = "Content-Security-Policy-Report-Only" HeaderCrossOriginResourcePolicy = "Cross-Origin-Resource-Policy" HeaderExpectCT = "Expect-CT" HeaderPermissionsPolicy = "Permissions-Policy" HeaderPublicKeyPins = "Public-Key-Pins" HeaderPublicKeyPinsReportOnly = "Public-Key-Pins-Report-Only" HeaderStrictTransportSecurity = "Strict-Transport-Security" HeaderUpgradeInsecureRequests = "Upgrade-Insecure-Requests" HeaderXContentTypeOptions = "X-Content-Type-Options" HeaderXDownloadOptions = "X-Download-Options" HeaderXFrameOptions = "X-Frame-Options" HeaderXPoweredBy = "X-Powered-By" HeaderXXSSProtection = "X-XSS-Protection" HeaderLastEventID = "Last-Event-ID" HeaderNEL = "NEL" HeaderPingFrom = "Ping-From" HeaderPingTo = "Ping-To" HeaderReportTo = "Report-To" HeaderTE = "TE" HeaderTrailer = "Trailer" HeaderTransferEncoding = "Transfer-Encoding" HeaderSecWebSocketAccept = "Sec-WebSocket-Accept" HeaderSecWebSocketExtensions = "Sec-WebSocket-Extensions" HeaderSecWebSocketKey = "Sec-WebSocket-Key" HeaderSecWebSocketProtocol = "Sec-WebSocket-Protocol" HeaderSecWebSocketVersion = "Sec-WebSocket-Version" HeaderAcceptPatch = "Accept-Patch" HeaderAcceptPushPolicy = "Accept-Push-Policy" HeaderAcceptSignature = "Accept-Signature" HeaderAltSvc = "Alt-Svc" HeaderDate = "Date" HeaderIndex = "Index" HeaderLargeAllocation = "Large-Allocation" HeaderLink = "Link" HeaderPushPolicy = "Push-Policy" HeaderRetryAfter = "Retry-After" HeaderServerTiming = "Server-Timing" HeaderSignature = "Signature" HeaderSignedHeaders = "Signed-Headers" HeaderSourceMap = "SourceMap" HeaderUpgrade = "Upgrade" HeaderXDNSPrefetchControl = "X-DNS-Prefetch-Control" HeaderXPingback = "X-Pingback" HeaderXRequestID = "X-Request-ID" HeaderXRequestedWith = "X-Requested-With" HeaderXRobotsTag = "X-Robots-Tag" HeaderXUACompatible = "X-UA-Compatible" HeaderAccessControlAllowPrivateNetwork = "Access-Control-Allow-Private-Network" HeaderAccessControlRequestPrivateNetwork = "Access-Control-Request-Private-Network" )
HTTP Headers were copied from net/http.
const ( TypeBoolean = "boolean" TypeInteger = "integer" TypeNumber = "number" TypeString = "string" TypeArray = "array" TypeObject = "object" )
JSON Schema 类型常量
const (
CtxKey = "_baa/sgin/ctx"
)
const DocsHTML = `` /* 593-byte string literal not displayed */
const EngineKey = "_baa/sgin/engine"
const Version = "3.1.2"
Variables ¶
var Logger = Hn(func(c *Ctx) { gc := c.Gin() start := time.Now() path := c.Request.URL.Path if raw := c.Request.URL.RawQuery; raw != "" { path = path + "?" + raw } gc.Next() end := time.Now() t := end.Format("2006-01-02 15:04:05") status := c.Writer.Status() ip := c.IP() traceid := c.traceid latency := fmt.Sprintf("%dms", end.Sub(start).Milliseconds()) errMsg := gc.Errors.ByType(gin.ErrorTypePrivate).String() methodColor := methodColor(c.Request.Method) msg := fmt.Sprintf( "[sgin] %s%s %s%s%s | path=%s%s%s status=%s%d%s latency=%s%s%s ip=%s%s%s traceid=%s%s%s", cyan, t, methodColor, c.Request.Method, reset, cyan, path, reset, cyan, status, reset, cyan, latency, reset, cyan, ip, reset, cyan, traceid, reset, ) if errMsg != "" { msg += fmt.Sprintf(" | error=%s%s%s", cyan, errMsg, reset) } if fn := c.engine.cfg.Logger; fn != nil { logMap := map[string]any{ "time": t, "status": status, "latency": latency, "ip": ip, "method": c.Request.Method, "path": path, "traceid": traceid, } if errMsg != "" { logMap["error"] = errMsg } var sb strings.Builder enc := sonic.ConfigFastest.NewEncoder(&sb) enc.SetEscapeHTML(false) _ = enc.Encode(logMap) fn(c, msg, sb.String()) return } fmt.Println(msg) })
Logger 返回一个 Gin 中间件,用于打印结构化的 JSON 请求日志。
var Recovery = He(func(c *Ctx) error { gc := c.Gin() defer func() { if recovered := recover(); recovered != nil { err, _ := recovered.(error) if err == nil { err = fmt.Errorf("%v", recovered) } // 检查连接是否断开 (broken pipe) var brokenPipe bool var ne *net.OpError if errors.As(err, &ne) { var se *os.SyscallError if errors.As(ne, &se) { seStr := strings.ToLower(se.Error()) brokenPipe = strings.Contains(seStr, "broken pipe") || strings.Contains(seStr, "connection reset by peer") } } if brokenPipe { fmt.Printf("%s[BROKEN PIPE]%s %s\n", red, reset, err) _ = gc.Error(err) gc.Abort() return } info := RecoverInfo{ Time: time.Now().Format("2006-01-02 15:04:05"), Path: c.Request.URL.Path, Method: c.Request.Method, Host: c.Request.Host, IP: c.IP(), ContentType: c.GetHeader(HeaderContentType), Accept: c.GetHeader(HeaderAccept), Traceid: c.traceid, Error: err.Error(), Sources: stack(3), } if fn := c.engine.cfg.Recovery; fn != nil { fn(c, info.String(), info.JSON()) } else { fmt.Print(info.String()) } _ = c.Send(ErrInternalServerError()) } }() return c.Next() })
Recovery 是一个增强版的错误恢复中间件,它能打印出发生 panic 的具体源代码片段。
Functions ¶
func DefaultErrorHandler ¶
DefaultErrorHandler 默认的错误处理器
func DefaultSchemaNamer ¶
DefaultSchemaNamer 根据 “去域名 + 取最后两级” 策略生成名称
Types ¶
type API ¶
type API struct {
*OpenAPI
}
API 持有 OpenAPI 生成过程中的所有可配置策略
type AddOperation ¶
type AddOperation func(*Operation)
type Claims ¶ added in v2.0.5
type Claims[T any] struct { Data T `json:"data"` jwt.RegisteredClaims }
type ClaimsValidator ¶ added in v2.0.5
type ClaimsValidator interface {
ValidateClaims(*jwt.RegisteredClaims) error
}
type Components ¶
type Components struct {
Schemas *Registry `yaml:"schemas,omitempty"`
SecuritySchemes map[string]*SecurityScheme `yaml:"securitySchemes,omitempty"`
}
type Config ¶
type Config struct {
Mode string // gin.DebugMode | gin.ReleaseMode | gin.TestMode
TrustedProxies []string // gin.SetTrustedProxies
Recovery func(c *Ctx, out, s string) // 回调 [带颜色的控制台输出] 和 [结构化 JSON 日志]
ErrorHandler func(c *Ctx, err error) error
Logger func(c *Ctx, out string, s string) // 回调 [带颜色的控制台输出] 和 [结构化 JSON 日志]
Cors func(*cors.Config) // 默认配置 cors.DefaultConfig()
OpenAPI *API
Locales []language.Tag // 绑定验证错误所使用的多语言支持
}
func DefaultConfig ¶ added in v2.0.4
DefaultConfig 默认配置
type Ctx ¶
type Ctx struct {
Request *http.Request
Writer gin.ResponseWriter
Uris gin.Params
Keys map[any]any
// contains filtered or unexported fields
}
func (*Ctx) ParamArray ¶ added in v2.0.1
func (*Ctx) ParamDuration ¶ added in v2.0.1
func (*Ctx) ParamFile ¶ added in v2.0.1
func (c *Ctx) ParamFile(key string) (*multipart.FileHeader, error)
ParamFile 获取上传的文件
func (*Ctx) ParamFloat32 ¶ added in v2.0.1
func (*Ctx) ParamFloat64 ¶ added in v2.0.1
func (*Ctx) Path ¶
Path 返回请求路径 默认返回经过解码的具体请求路径,例如: "/users/123/profile" 传递 true 时返回路由定义字符串,例如: "/users/:id/profile"
func (*Ctx) SendReader ¶ added in v2.0.1
SendReader 从 io.Reader 发送数据 size: 数据长度 (如果未知传 -1)
func (*Ctx) SendRedirect ¶ added in v2.0.2
SendRedirect 返回到特定位置的 HTTP 重定向
func (*Ctx) SendSSEvent ¶ added in v2.0.1
SendSSEvent 将服务器发送事件写入正体流
func (*Ctx) SendStream ¶ added in v2.0.1
SendStream 发送流响应并返回布尔值,标识 “客户端是否在流中间断开连接”。
func (*Ctx) StatusCode ¶
type Engine ¶
type Engine struct {
Router
// contains filtered or unexported fields
}
type Error ¶
Error 是 APIError 的默认实现
func ErrExpectationFailed ¶
ErrExpectationFailed 417
func ErrHTTPVersionNotSupported ¶
ErrHTTPVersionNotSupported 505
func ErrHeaderFieldsTooLarge ¶
ErrHeaderFieldsTooLarge 431
func ErrInsufficientStorage ¶
ErrInsufficientStorage 507
func ErrInternalServerError ¶
ErrInternalServerError 500
func ErrMisdirectedRequest ¶
ErrMisdirectedRequest 421
func ErrNetworkAuthenticationRequired ¶
ErrNetworkAuthenticationRequired 511
func ErrPreconditionFailed ¶
ErrPreconditionFailed 412
func ErrPreconditionRequired ¶
ErrPreconditionRequired 428
func ErrProxyAuthRequired ¶
ErrProxyAuthRequired 407
func ErrRangeNotSatisfiable ¶
ErrRangeNotSatisfiable 416
func ErrServiceUnavailable ¶
ErrServiceUnavailable 503
func ErrUnavailableForLegalReasons ¶
ErrUnavailableForLegalReasons 451
func ErrUnprocessableEntity ¶
ErrUnprocessableEntity 422
func ErrUnsupportedMediaType ¶
ErrUnsupportedMediaType 415
func ErrVariantAlsoNegotiates ¶
ErrVariantAlsoNegotiates 506
type Field ¶
type Field struct {
Parent reflect.Type
Name reflect.StructField
}
Field 用于存储字段的详细信息,包括其直接父级类型。
type HandleMeta ¶
type HandleMeta struct {
// contains filtered or unexported fields
}
func (*HandleMeta) Delete ¶
func (m *HandleMeta) Delete(h Handler)
func (*HandleMeta) Pop ¶
func (m *HandleMeta) Pop(h Handler) (a *HandleArg)
func (*HandleMeta) Set ¶
func (m *HandleMeta) Set(h Handler, meta *HandleArg)
type IRouter ¶
type IRouter interface {
Use(...Handler) IRouter
GET(string, Handler, ...AddOperation) IRouter
POST(string, Handler, ...AddOperation) IRouter
PUT(string, Handler, ...AddOperation) IRouter
DELETE(string, Handler, ...AddOperation) IRouter
HEAD(string, Handler, ...AddOperation) IRouter
PATCH(string, Handler, ...AddOperation) IRouter
OPTIONS(string, Handler, ...AddOperation) IRouter
Handle(string, string, Handler, ...AddOperation) IRouter
Any(string, Handler, ...AddOperation) IRouter
Match([]string, string, Handler, ...AddOperation) IRouter
Group(string, ...AddOperation) IRouter
Static(string, string) IRouter
StaticFile(string, string) IRouter
StaticFileFS(string, string, http.FileSystem) IRouter
StaticFS(string, http.FileSystem) IRouter
}
type JWT ¶ added in v2.0.5
type JWT[T any] struct { Key string // 上下文键名 (如 "user") Secret []byte // 签名密钥 Timeout time.Duration // 默认过期时间 Method jwt.SigningMethod // 签名算法 Issuer string // 签发者 }
func (*JWT[T]) Issue ¶ added in v2.0.5
func (j *JWT[T]) Issue(data T, opts ...jwt.TokenOption) (string, error)
type OpenAPI ¶
type OpenAPI struct {
OpenAPI string `yaml:"openapi"`
Info *Info `yaml:"info"`
Paths map[string]*PathItem `yaml:"paths,omitempty"`
Components *Components `yaml:"components"`
Security []Requirement `yaml:"security,omitempty"`
Tags []*Tag `yaml:"tags,omitempty"`
// contains filtered or unexported fields
}
type Operation ¶
type Operation struct {
Summary string `yaml:"summary,omitempty"`
Description string `yaml:"description,omitempty"`
Parameters []*Param `yaml:"parameters,omitempty"`
RequestBody *RequestBody `yaml:"requestBody,omitempty"`
Responses map[string]*ResponseBody `yaml:"responses,omitempty"`
Security []Requirement `yaml:"security,omitempty"`
Tags []string `yaml:"tags,omitempty"`
Hidden bool `yaml:"-"`
}
type PathItem ¶
type PathItem struct {
Ref string `yaml:"$ref,omitempty"`
Summary string `yaml:"summary,omitempty"`
Description string `yaml:"description,omitempty"`
Get *Operation `yaml:"get,omitempty"`
Put *Operation `yaml:"put,omitempty"`
Post *Operation `yaml:"post,omitempty"`
Delete *Operation `yaml:"delete,omitempty"`
Options *Operation `yaml:"options,omitempty"`
Head *Operation `yaml:"head,omitempty"`
Patch *Operation `yaml:"patch,omitempty"`
Trace *Operation `yaml:"trace,omitempty"`
Parameters []*Param `yaml:"parameters,omitempty"`
}
type RecoverInfo ¶
type RecoverInfo struct {
Time string `json:"time"`
Path string `json:"path"`
Method string `json:"method"`
Host string `json:"host"`
IP string `json:"ip"`
ContentType string `json:"content"`
Accept string `json:"accept"`
Traceid string `json:"traceid"`
Error string `json:"error"`
Sources []*Stack `json:"stack"`
}
func (*RecoverInfo) JSON ¶
func (r *RecoverInfo) JSON() string
func (*RecoverInfo) String ¶
func (r *RecoverInfo) String() string
type Registry ¶
type Registry struct {
Namer func(reflect.Type, string) string `yaml:"-"`
Prefix string
// contains filtered or unexported fields
}
func NewRegistry ¶
func (*Registry) DecodeJSON ¶
DecodeJSON 根据字段的 Schema 类型,将从 tag 读取的字符串值解析为正确的 Go 类型。
func (*Registry) MarshalYAML ¶
type RequestBody ¶
type Requirement ¶
type ResponseBody ¶
type Result ¶
type Result struct {
Event string `json:"event"` // 事件标识
Status int `json:"status"` // 自定义状态码,经常用于定义请求成功或失败等错误状态 (非 HTTP 状态码)
Code int `json:"code"` // 自定义代码,经常与 Status 关联。例如: Status=0 时,Code=N。
Count int `json:"count"` // 如果 Data 返回列表,可以在这里设置列表长度。
Msg string `json:"msg"` // 结果消息
Data any `json:"data"` // 结果数据
}
type Router ¶
type Router struct {
// contains filtered or unexported fields
}
func (*Router) DELETE ¶
func (r *Router) DELETE(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) Handle ¶
func (r *Router) Handle(method, path string, h Handler, ops ...AddOperation) IRouter
func (*Router) OPTIONS ¶
func (r *Router) OPTIONS(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) StaticFile ¶
func (*Router) StaticFileFS ¶
func (r *Router) StaticFileFS(name, root string, fs http.FileSystem) IRouter
type Schema ¶
type Schema struct {
Type any `yaml:"type,omitempty"`
Nullable bool `yaml:"-"`
Title string `yaml:"title,omitempty"`
Description string `yaml:"description,omitempty"`
Ref string `yaml:"$ref,omitempty"`
Format string `yaml:"format,omitempty"`
ContentEncoding string `yaml:"contentEncoding,omitempty"`
Default any `yaml:"default,omitempty"`
Items *Schema `yaml:"items,omitempty"` // For arrays
AdditionalProperties any `yaml:"additionalProperties,omitempty"` // Schema or bool
Properties map[string]*Schema `yaml:"properties,omitempty"`
Enum []any `yaml:"enum,omitempty"`
Required []string `yaml:"required,omitempty"`
}
func (*Schema) MarshalYAML ¶
type SecurityScheme ¶
type SecurityScheme struct {
Type string `yaml:"type"` // "http", "apiKey", "oauth2"
Description string `yaml:"description,omitempty"`
Name string `yaml:"name,omitempty"` // Header name for apiKey
In string `yaml:"in,omitempty"` // "header" for apiKey
Scheme string `yaml:"scheme,omitempty"` // "bearer" (for HTTP)
BearerFormat string `yaml:"bearerFormat,omitempty"` // "JWT" (for bearer)
}