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 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 string, 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 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) (string, error)
- func (j *JWT[T]) IssueWith(data T, setup func(*Claims[T])) (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 APIHidden ¶ added in v1.0.0
func APIHidden(op *Operation)
APIHidden 将 Operation 标记为隐藏,使其不会出现在 OpenAPI 文档中。
func DefaultErrorHandler ¶
DefaultErrorHandler 默认错误处理器
func DefaultSchemaNamer ¶ added in v1.0.0
DefaultSchemaNamer 根据 “去域名 + 取最后两级” 策略生成名称
func SupportedLanguages ¶ added in v0.0.11
SupportedLanguages 返回框架支持的所有语言标签
Types ¶
type API ¶ added in v1.0.0
type API struct {
*OpenAPI
}
API 持有 OpenAPI 生成过程中的所有可配置策略
func (*API) Field ¶ added in v1.0.0
func (a *API) Field(f reflect.StructField, hint string) (s *Schema)
type AddOperation ¶ added in v1.0.0
type AddOperation func(*Operation)
type Claims ¶ added in v1.0.5
type Claims[T any] struct { Data T `json:"data"` jwt.RegisteredClaims }
type Components ¶ added in v1.0.0
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 v1.0.4
DefaultConfig 默认配置
type Ctx ¶
type Ctx struct {
Request *http.Request
Writer gin.ResponseWriter
Uris gin.Params
Keys map[string]any
// contains filtered or unexported fields
}
func (*Ctx) ParamArray ¶ added in v1.0.1
func (*Ctx) ParamDuration ¶ added in v1.0.1
func (*Ctx) ParamFile ¶ added in v1.0.1
func (c *Ctx) ParamFile(key string) (*multipart.FileHeader, error)
ParamFile 获取上传的文件
func (*Ctx) ParamFloat32 ¶ added in v1.0.1
func (*Ctx) ParamFloat64 ¶ added in v1.0.1
func (*Ctx) Path ¶
Path 返回请求路径 默认返回经过解码的具体请求路径,例如: "/users/123/profile" 传递 true 时返回路由定义字符串,例如: "/users/:id/profile"
func (*Ctx) SendReader ¶ added in v1.0.1
SendReader 从 io.Reader 发送数据 size: 数据长度 (如果未知传 -1)
func (*Ctx) SendRedirect ¶ added in v1.0.2
SendRedirect 返回到特定位置的 HTTP 重定向
func (*Ctx) SendSSEvent ¶ added in v1.0.1
SendSSEvent 将服务器发送事件写入正体流
func (*Ctx) SendStream ¶ added in v1.0.1
SendStream 发送流响应并返回布尔值,标识 “客户端是否在流中间断开连接”。
func (*Ctx) StatusCode ¶
type Engine ¶
type Engine struct {
Router
// contains filtered or unexported fields
}
type Error ¶
Error 是 APIError 的默认实现
func ErrEntityTooLarge ¶ added in v0.0.8
ErrEntityTooLarge 413
func ErrExpectationFailed ¶
ErrExpectationFailed 417
func ErrHTTPVersionNotSupported ¶
ErrHTTPVersionNotSupported 505
func ErrHeaderFieldsTooLarge ¶ added in v0.0.8
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 ¶ added in v0.0.8
ErrRangeNotSatisfiable 416
func ErrServiceUnavailable ¶
ErrServiceUnavailable 503
func ErrUnavailableForLegalReasons ¶
ErrUnavailableForLegalReasons 451
func ErrUnprocessableEntity ¶
ErrUnprocessableEntity 422
func ErrUnsupportedMediaType ¶
ErrUnsupportedMediaType 415
func ErrVariantAlsoNegotiates ¶
ErrVariantAlsoNegotiates 506
type HandleMeta ¶ added in v1.0.0
type HandleMeta struct {
// contains filtered or unexported fields
}
func (*HandleMeta) Delete ¶ added in v1.0.0
func (m *HandleMeta) Delete(h Handler)
func (*HandleMeta) Pop ¶ added in v1.0.0
func (m *HandleMeta) Pop(h Handler) (a *HandleArg)
func (*HandleMeta) Set ¶ added in v1.0.0
func (m *HandleMeta) Set(h Handler, meta *HandleArg)
type Handler ¶
type Handler = gin.HandlerFunc
type IRouter ¶ added in v0.0.7
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 v1.0.5
type JWT[T any] struct { Key string // 上下文键名 (如 "user") Secret []byte // 签名密钥 Timeout time.Duration // 默认过期时间 Method jwt.SigningMethod // 签名算法 Issuer string // 签发者 }
type OpenAPI ¶ added in v1.0.0
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 ¶ added in v1.0.0
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 ¶ added in v1.0.0
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 ¶ added in v0.0.9
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 ¶ added in v0.0.9
func (r *RecoverInfo) JSON() string
func (*RecoverInfo) String ¶ added in v0.0.9
func (r *RecoverInfo) String() string
type Registry ¶ added in v1.0.0
type Registry struct {
Namer func(reflect.Type, string) string `yaml:"-"`
Prefix string
// contains filtered or unexported fields
}
func NewRegistry ¶ added in v1.0.0
func (*Registry) DecodeJSON ¶ added in v1.0.0
DecodeJSON 根据字段的 Schema 类型,将从 tag 读取的字符串值解析为正确的 Go 类型。
func (*Registry) Field ¶ added in v1.0.0
func (r *Registry) Field(f reflect.StructField, hint string) (s *Schema)
func (*Registry) MarshalYAML ¶ added in v1.0.0
type RequestBody ¶ added in v1.0.0
type Requirement ¶ added in v1.0.0
type ResponseBody ¶ added in v1.0.0
type Result ¶ added in v1.0.0
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) Any ¶ added in v1.0.0
func (r *Router) Any(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) DELETE ¶ added in v0.0.6
func (r *Router) DELETE(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) HEAD ¶ added in v1.0.0
func (r *Router) HEAD(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 ¶ added in v1.0.0
func (r *Router) OPTIONS(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) PATCH ¶ added in v1.0.0
func (r *Router) PATCH(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) PUT ¶ added in v0.0.6
func (r *Router) PUT(path string, h Handler, ops ...AddOperation) IRouter
func (*Router) StaticFS ¶ added in v1.0.0
func (r *Router) StaticFS(name string, root http.FileSystem) IRouter
func (*Router) StaticFile ¶ added in v1.0.0
func (*Router) StaticFileFS ¶ added in v1.0.0
func (r *Router) StaticFileFS(name, root string, fs http.FileSystem) IRouter
type Schema ¶ added in v1.0.0
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 ¶ added in v1.0.0
type SecurityScheme ¶ added in v1.0.0
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)
}