Documentation ¶
Overview ¶
Package server 服务管理
Index ¶
- Constants
- type BuildProblemFunc
- type CTXFilter
- type Config
- type Context
- func (ctx *Context) Begin() time.Time
- func (ctx *Context) Charset() string
- func (ctx *Context) ClientIP() string
- func (ctx *Context) Encoding() string
- func (ctx *Context) Error(id string, level logs.Level, err error) Problem
- func (ctx *Context) GetVar(key any) (any, bool)
- func (ctx *Context) Header() http.Header
- func (ctx *Context) ID() string
- func (ctx *Context) InternalServerError(err error) Problem
- func (ctx *Context) IsXHR() bool
- func (ctx *Context) LanguageTag() language.Tag
- func (ctx *Context) LocalePrinter() *message.Printer
- func (ctx *Context) Logs() *logs.ParamsLogs
- func (ctx *Context) Marshal(v any) ([]byte, error)
- func (ctx *Context) Mimetype(problem bool) string
- func (ctx *Context) NewFilterProblem(exitAtError bool) *FilterProblem
- func (ctx *Context) NotFound() Problem
- func (ctx *Context) NotImplemented() Problem
- func (ctx *Context) OnExit(f func(*Context, int))
- func (ctx *Context) ParamID(key, id string) (int64, Responser)
- func (ctx *Context) ParamInt64(key, id string) (int64, Responser)
- func (ctx *Context) ParamString(key, id string) (string, Responser)
- func (ctx *Context) Params(exitAtError bool) *Params
- func (ctx *Context) Problem(id string) Problem
- func (ctx *Context) Queries(exitAtError bool) (*Queries, error)
- func (ctx *Context) QueryObject(exitAtError bool, v any, id string) Responser
- func (ctx *Context) Read(exitAtError bool, v any, id string) Responser
- func (ctx *Context) Render(status int, body any, problem bool)
- func (ctx *Context) Request() *http.Request
- func (ctx *Context) RequestBody() (body []byte, err error)
- func (ctx *Context) Route() types.Route
- func (ctx *Context) Server() *Server
- func (ctx *Context) SetCharset(charset string)
- func (ctx *Context) SetEncoding(enc string)
- func (ctx *Context) SetLanguage(tag language.Tag)
- func (ctx *Context) SetMimetype(mimetype string)
- func (ctx *Context) SetVar(key, val any)
- func (ctx *Context) SetWriter(f func(http.ResponseWriter) http.ResponseWriter)
- func (ctx *Context) Sprintf(key localeutil.Key, v ...any) string
- func (ctx *Context) Unmarshal(v any) error
- func (ctx *Context) Unwrap() http.ResponseWriter
- func (ctx *Context) Write(bs []byte) (int, error)
- func (ctx *Context) WriteHeader(status int)
- func (ctx *Context) Wrote() bool
- type Encoding
- type FilterProblem
- func (v *FilterProblem) Add(name string, reason localeutil.LocaleStringer) *FilterProblem
- func (v *FilterProblem) AddError(name string, err error) *FilterProblem
- func (v *FilterProblem) AddFilter(f filter.FilterFunc) *FilterProblem
- func (v *FilterProblem) Context() *Context
- func (v *FilterProblem) Problem(id string) Problem
- func (v *FilterProblem) When(cond bool, f func(v *FilterProblem)) *FilterProblem
- type HandlerFunc
- type JobFunc
- type Locale
- type MarshalFunc
- type Middleware
- type MiddlewareFunc
- type Mimetype
- type NewEncodingFunc
- type Options
- type Params
- type Problem
- type Problems
- type Queries
- func (q *Queries) Bool(key string, def bool) bool
- func (q *Queries) Float64(key string, def float64) float64
- func (q *Queries) Int(key string, def int) int
- func (q *Queries) Int64(key string, def int64) int64
- func (q *Queries) Object(v any, id string)
- func (q *Queries) Problem(id string) Responser
- func (q *Queries) String(key, def string) string
- type Responser
- type ResponserFunc
- type Router
- type RouterMatcher
- type RouterOption
- type Scheduler
- type Server
- func (srv *Server) AddProblem(id string, status int, title, detail localeutil.LocaleStringer) *Server
- func (srv *Server) Cache() cache.CleanableCache
- func (srv *Server) CatalogBuilder() *catalog.Builder
- func (srv *Server) Close(shutdownTimeout time.Duration)
- func (srv *Server) Config() *config.Config
- func (srv *Server) FileServer(fsys fs.FS, name, index string) HandlerFunc
- func (srv *Server) GetRouter(name string) *Router
- func (srv *Server) Language() language.Tag
- func (srv *Server) LoadLocales(fsys fs.FS, glob string) error
- func (srv *Server) LocalePrinter() *message.Printer
- func (srv *Server) Location() *time.Location
- func (srv *Server) Logs() *logs.Logs
- func (srv *Server) Name() string
- func (srv *Server) NewPrinter(tag language.Tag) *message.Printer
- func (srv *Server) NewRouter(name string, matcher RouterMatcher, o ...RouterOption) *Router
- func (srv *Server) Now() time.Time
- func (srv *Server) OnClose(f ...func() error)
- func (srv *Server) Open(name string) (fs.File, error)
- func (srv *Server) ParseTime(layout, value string) (time.Time, error)
- func (srv *Server) RemoveRouter(name string)
- func (srv *Server) Routers() []*Router
- func (srv *Server) Serve() (err error)
- func (srv *Server) Services() *Services
- func (srv *Server) State() State
- func (srv *Server) UniqueID() string
- func (srv *Server) Uptime() time.Time
- func (srv *Server) UseMiddleware(m ...Middleware)
- func (srv *Server) Vars() *sync.Map
- func (srv *Server) Version() string
- func (srv *Server) VisitProblems(...)
- type Service
- type ServiceFunc
- type Services
- func (srv *Services) Add(title localeutil.LocaleStringer, f Service)
- func (srv *Services) AddAt(title localeutil.LocaleStringer, job JobFunc, at time.Time, delay bool)
- func (srv *Services) AddCron(title localeutil.LocaleStringer, f JobFunc, spec string, delay bool)
- func (srv *Services) AddFunc(title localeutil.LocaleStringer, f func(context.Context) error)
- func (srv *Services) AddJob(title localeutil.LocaleStringer, job JobFunc, scheduler Scheduler, delay bool)
- func (srv *Services) AddTicker(title localeutil.LocaleStringer, job JobFunc, dur time.Duration, ...)
- func (srv *Services) Visit(visit func(title localeutil.LocaleStringer, state State, err error))
- func (srv *Services) VisitJobs(...)
- type State
- type UniqueGenerator
- type UnmarshalFunc
Constants ¶
const ( Stopped = scheduled.Stopped // 停止状态,默认状态 Running = scheduled.Running // 正在运行 Failed = scheduled.Failed // 出错,不再执行后续操作 )
服务的几种状态
const DefaultConfigDir = "@/.config"
const RequestIDKey = "X-Request-ID"
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BuildProblemFunc ¶ added in v0.55.0
BuildProblemFunc 生成 Problem 对象的方法
id 表示当前错误信息的唯一值,该值有可能为 about:blank,表示不想向用户展示具体的值; title 错误信息的简要描述; status 输出的状态码;
type CTXFilter ¶ added in v0.73.0
type CTXFilter interface {
CTXFilter(*FilterProblem)
}
CTXFilter 在 Context 关联的上下文环境中对数据进行验证和修正
在 Context.Read、Context.QueryObject 以及 Queries.Object 中会在解析数据成功之后会调用该接口。
type Context ¶
type Context struct {
// contains filtered or unexported fields
}
Context 根据当次 HTTP 请求生成的上下文内容
Context 同时也实现了 http.ResponseWriter 接口, 但是不推荐非必要情况下直接使用 http.ResponseWriter 的接口方法, 而是采用返回 Responser 的方式向客户端输出内容。
func (*Context) ClientIP ¶
ClientIP 返回客户端的 IP 地址及端口
获取顺序如下:
- X-Forwarded-For 的第一个元素
- Remote-Addr 报头
- X-Read-IP 报头
func (*Context) ID ¶ added in v0.66.0
ID 当前请求的唯一 ID
一般源自客户端的 X-Request-ID 报头,如果不存在,则由 Server.UniqueID 生成。
func (*Context) InternalServerError ¶ added in v0.49.0
InternalServerError 输出 ERROR 通道并向返回 500 表示的 Problem 对象
func (*Context) LanguageTag ¶ added in v0.49.0
func (*Context) LocalePrinter ¶
func (*Context) Logs ¶ added in v0.44.0
func (ctx *Context) Logs() *logs.ParamsLogs
Logs 返回日志操作对象
该返回实例与 Server.Logs 是不同的, 当前返回实例的日志输出时会带上当前请求的 x-request-id 作为额外参数。
输出内容依然遵照 Server.Logs 的规则作本地化处理。
func (*Context) Mimetype ¶ added in v0.60.0
Mimetype 输出编码名称
problem 表示是否返回 problem 时的 mimetype 值。该值由 [Mimetypes] 设置。
func (*Context) NewFilterProblem ¶ added in v0.74.0
func (ctx *Context) NewFilterProblem(exitAtError bool) *FilterProblem
func (*Context) NotImplemented ¶
func (*Context) ParamID ¶
ParamID 获取地址参数中表示 key 的值并并转换成大于 0 的 int64
NOTE: 若需要获取多个参数,使用 Context.Params 会更方便。
func (*Context) ParamInt64 ¶
ParamInt64 取地址参数中的 key 表示的值并尝试工转换成 int64 类型
NOTE: 若需要获取多个参数,可以使用 Context.Params 获取会更方便。
func (*Context) ParamString ¶
ParamString 取地址参数中的 key 表示的值并尝试工转换成 string 类型
NOTE: 若需要获取多个参数,可以使用 Context.Params 获取会更方便。
func (*Context) Problem ¶ added in v0.55.0
Problem 返回批定 id 的错误信息
id 通过此值从 Problems 中查找相应在的 title 并赋值给返回对象;
func (*Context) QueryObject ¶
QueryObject 将查询参数解析到一个对象中
func (*Context) Read ¶
Read 从客户端读取数据并转换成 v 对象
如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用其接口函数。 如果验证失败,会输出以 id 作为错误代码的 Responser 对象。
func (*Context) Render ¶
Render 向客户端输出对象
status 想输出给用户状态码,如果出错,那么最终展示给用户的状态码可能不是此值; problem 表示 body 是否为 Problem 对象,对于 Problem 对象可能会有特殊的处理; body 表示输出的对象,该对象最终调用 ctx.outputMimetype 编码。 如果 body 实现了 [ETager] 接口,则会尝试用 304 状态码的输出;
func (*Context) RequestBody ¶ added in v0.68.0
RequestBody 获取用户提交的内容
相对于 [Context.Request.Body],此函数可多次读取。不存在 body 时,返回 nil
func (*Context) SetCharset ¶ added in v0.60.0
SetCharset 设置输出的字符集
相当于重新设置了 Context.Request 的 Accept-Charset 报头,但是不会实际修改 Context.Request。
func (*Context) SetEncoding ¶ added in v0.60.0
SetEncoding 设置压缩编码
相当于重新设置了 Context.Request 的 Accept-Encoding 报头,但是不会实际修改 Context.Request。
func (*Context) SetLanguage ¶ added in v0.49.0
SetLanguage 修改输出的语言
相当于重新设置了 Context.Request 的 Accept-Language 报头,但是不会实际修改 Context.Request。
func (*Context) SetMimetype ¶ added in v0.60.0
SetMimetype 设置输出的格式
相当于重新设置了 Context.Request 的 Accept 报头,但是不会实际修改 Context.Request。
func (*Context) SetWriter ¶ added in v0.67.1
func (ctx *Context) SetWriter(f func(http.ResponseWriter) http.ResponseWriter)
SetWriter 自定义输出通道
f 用于构建一个用于输出的 http.ResponseWriter 接口对象,其原型为:
func(w http.ResponseWriter) http.ResponseWriter
其中 w 表示原本与 Context 关联的对象,用户可以基于此对象作二次封装, 或是完全舍弃,都是可以的。
如果已经有内容输出,此操作将会 panic。
func (*Context) Sprintf ¶
func (ctx *Context) Sprintf(key localeutil.Key, v ...any) string
Sprintf 将内容翻译成当前请求的语言
func (*Context) Unwrap ¶ added in v0.60.0
func (ctx *Context) Unwrap() http.ResponseWriter
Unwrap 返回底层的 http.ResponseWriter
在 go1.20 之后,可由 http.ResponseController 可能要用到此方法。
type Encoding ¶ added in v0.70.0
type Encoding struct { // 压缩算法的名称 Name string // 压缩算法的构建对象 Builder NewEncodingFunc // 该压缩算法支持的 content-type // // 如果为空,将被设置为 * ContentTypes []string }
type FilterProblem ¶ added in v0.74.0
type FilterProblem struct {
// contains filtered or unexported fields
}
FilterProblem 处理由过滤器生成的各错误
func (*FilterProblem) Add ¶ added in v0.74.0
func (v *FilterProblem) Add(name string, reason localeutil.LocaleStringer) *FilterProblem
Add 添加一条错误信息
func (*FilterProblem) AddError ¶ added in v0.74.0
func (v *FilterProblem) AddError(name string, err error) *FilterProblem
AddError 添加一条类型为 error 的错误信息
func (*FilterProblem) AddFilter ¶ added in v0.74.0
func (v *FilterProblem) AddFilter(f filter.FilterFunc) *FilterProblem
func (*FilterProblem) Context ¶ added in v0.74.0
func (v *FilterProblem) Context() *Context
Context 返回关联的 Context 实例
func (*FilterProblem) Problem ¶ added in v0.74.0
func (v *FilterProblem) Problem(id string) Problem
Problem 转换成 Problem 对象
如果当前对象没有收集到错误,那么将返回 nil。
func (*FilterProblem) When ¶ added in v0.74.0
func (v *FilterProblem) When(cond bool, f func(v *FilterProblem)) *FilterProblem
When 只有满足 cond 才执行 f 中的验证
f 中的 v 即为当前对象;
type HandlerFunc ¶
HandlerFunc 路由的处理函数
向客户端输出内容的有两种方法,一种是通过 Context.Write 方法; 或是返回 Responser 对象。前者在调用 Context.Write 时即输出内容, 后者会在整个请求退出时才将 Responser 进行编码输出。
返回值可以为空,表示在中间件执行过程中已经向客户端输出同内容。
type MarshalFunc ¶ added in v0.61.0
MarshalFunc 序列化函数原型
NOTE: MarshalFunc 的实现中不能调用 Context.Render 方法。
type Middleware ¶ added in v0.48.0
type Middleware = types.MiddlewareOf[HandlerFunc]
type MiddlewareFunc ¶ added in v0.48.0
type MiddlewareFunc = types.MiddlewareFuncOf[HandlerFunc]
type Mimetype ¶ added in v0.70.0
type Mimetype struct { // Mimetype 的值 Type string // 对应的错误状态下的 mimetype 值 // // 可以为空,表示与 Type 相同。 ProblemType string // 编码方法 Marshal MarshalFunc // 解码方法 Unmarshal UnmarshalFunc }
type NewEncodingFunc ¶ added in v0.55.0
type NewEncodingFunc = encoding.NewEncodingFunc
func EncodingBrotli ¶ added in v0.55.1
func EncodingBrotli(o brotli.WriterOptions) NewEncodingFunc
EncodingBrotli 返回指定配置的 br 算法
func EncodingCompress ¶ added in v0.55.1
func EncodingCompress(order lzw.Order, width int) NewEncodingFunc
EncodingCompress 返回指定配置的 compress 算法
func EncodingDeflate ¶ added in v0.55.1
func EncodingDeflate(level int) NewEncodingFunc
EncodingDeflate 返回指定配置的 deflate 算法
func EncodingGZip ¶ added in v0.55.1
func EncodingGZip(level int) NewEncodingFunc
EncodingGZip 返回指定配置的 gzip 算法
func EncodingZstd ¶ added in v0.59.0
func EncodingZstd(o ...zstd.EOption) NewEncodingFunc
EncodingZstd 返回指定配置的 zstd 算法
type Options ¶
type Options struct { // 项目的配置项 // // 如果涉及到需要读取配置文件的,可以指定此对象,之后可通过此对象统一处理各类配置文件。 // 如果为空,则会采用 config.AppDir(DefaultConfigDir) 进行初始化。 Config *config.Config // 服务器的时区 // // 默认值为 [time.Local] Location *time.Location // 缓存系统 // // 默认值为内存类型。 Cache cache.Driver // 日志的输出通道设置 // // 如果此值为空,表示不会输出到任何通道。 Logs *logs.Options // http.Server 实例的值 // // 如果为空,表示 &http.Server{} 对象。 HTTPServer *http.Server // 生成唯一字符串的方法 // // 供 [Server.UniqueID] 使用。 // // 如果为空,将采用 [unique.NewDate] 作为生成方法,[unique.Date]。 UniqueGenerator UniqueGenerator // 路由选项 // // 将应用 [Server.Routers] 对象之上。 RoutersOptions []RouterOption // 指定获取 x-request-id 内容的报头名 // // 如果为空,则采用 [RequestIDKey] 作为默认值 RequestIDKey string // 可用的压缩类型 // // 默认为空。表示不需要该功能。 Encodings []*Encoding // 本地化的相关设置 // // 可以为空,表示根据当前服务器环境检测适当的值。 Locale *Locale // 指定可用的 mimetype // // 默认为空。 Mimetypes []*Mimetype // 针对错误代码的配置 Problems *Problems // contains filtered or unexported fields }
Options Server 的初始化参数
这些参数都有默认值,且无法在 Server 初始化之后进行更改。
type Params ¶
type Params struct {
// contains filtered or unexported fields
}
type Problem ¶ added in v0.55.0
type Problem interface { Responser // With 添加新的输出字段 // // 如果添加的字段名称与现有的字段重名,应当 panic。 With(key string, val any) // AddParam 添加具体的错误字段及描述信息 // // name 为字段名称;reason 为该字段的错误信息; // 可以多次添加相同 name 的项。 AddParam(name string, reason string) }
Problem API 错误信息对象需要实现的接口
Problem 是对 Responser 细化,用于反馈给用户非正常状态下的数据, 比如用户提交的数据错误,往往会返回 400 的状态码, 并附带一些具体的字段错误信息,此类数据都可以以 Problem 对象的方式反馈给用户。
除了当前接口,该对象可能还要实现相应的序列化接口,比如要能被 JSON 解析, 就要实现 json.Marshaler 接口或是相应的 struct tag。
并未规定实现者输出的字段名和布局,实现者可以根据 BuildProblemFunc 给定的参数,结合自身需求决定。比如 RFC7807Builder 是对 RFC7807 的实现。
func RFC7807Builder ¶ added in v0.55.0
RFC7807Builder BuildProblemFunc 的 RFC7807 标准实现
NOTE: 由于 www-form-urlencoded 对复杂对象的表现能力有限, 在此模式下将忽略由 [Problem.With] 添加的复杂类型,只保留基本类型。
type Problems ¶ added in v0.55.0
type Problems struct { // 生成 [Problem] 对象的方法 // // 如果为空,那么将采用 [RFC7807Builder] 作为默认值。 Builder BuildProblemFunc // Problem 为传递给 BuildProblemFunc 的 id 参数指定前缀 // // 如果该值为 [ProblemAboutBlank],将不输出 ID 值;其它值则作为前缀添加。 IDPrefix string }
type Queries ¶
type Queries struct {
// contains filtered or unexported fields
}
func (*Queries) Object ¶
Object 将查询参数解析到一个对象中
具体的文档信息可以参考 https://github.com/issue9/query
如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用其接口函数。
type Responser ¶ added in v0.40.0
type Responser interface { // Apply 通过 [Context] 将当前内容渲染到客户端 // // 在调用 Apply 之后,就不再使用 Responser 对象。 // 如果你的对象支持 sync.Pool 复用,可以在 Apply 退出之际回收。 Apply(*Context) }
Responser 向客户端输出对象需要实现的接口
type ResponserFunc ¶ added in v0.55.0
type ResponserFunc func(*Context)
func (ResponserFunc) Apply ¶ added in v0.55.0
func (f ResponserFunc) Apply(c *Context)
type Router ¶
type Router = mux.RouterOf[HandlerFunc]
type RouterMatcher ¶ added in v0.71.0
type RouterOption ¶ added in v0.71.0
type RouterOption = mux.Option
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server web 服务对象
func (*Server) AddProblem ¶ added in v0.70.0
func (srv *Server) AddProblem(id string, status int, title, detail localeutil.LocaleStringer) *Server
AddProblem 添加新的错误代码
func (*Server) CatalogBuilder ¶ added in v0.55.0
func (*Server) Close ¶
Close 关闭服务
无论是否出错,该操作最终都会导致 Server.Serve 的退出。 调用此方法表示 Server 的生命周期结束,对象将处于不可用状态。
func (*Server) FileServer ¶ added in v0.44.0
func (srv *Server) FileServer(fsys fs.FS, name, index string) HandlerFunc
FileServer 构建静态文件服务对象
fsys 为文件系统,如果为空则采用 Server 本身; name 表示地址中表示文件名部分的参数名称; index 表示目录下的默认文件名;
func (*Server) GetRouter ¶ added in v0.71.0
Router 返回指定名称的路由
name 指由 Server.NewRouter 的 name 参数指定的值;
func (*Server) LoadLocales ¶ added in v0.61.0
LoadLocales 加载本地化的内容
func (*Server) LocalePrinter ¶ added in v0.41.0
func (*Server) Logs ¶
Logs 返回日志对象
所有日志接口都会根据 Server.LocalePrinter 进行本地化,规则如下:
- Logger.Error 如果参数实现了 localeutil.LocaleStringer 接口,会尝试本地化;
- Logger.String 会采用 message.Printer.Sprintf 进行本地化;
- Logger.Printf 会采用 message.Printer.Sprintf 进行本地化,且每个参数也将进行本地化;
- Logger.Print 对每个参数分别进行本地化,然后调用 fmt.Sprint 输出;
- Logger.Println 对每个参数分别进行本地化,然后调用 fmt.Sprintln 输出;
func (*Server) NewPrinter ¶ added in v0.55.0
func (*Server) NewRouter ¶ added in v0.40.0
func (srv *Server) NewRouter(name string, matcher RouterMatcher, o ...RouterOption) *Router
NewRouter 声明新路由
新路由会继承 [Options.RoutersOptions] 中指定的参数,其中的 o 可以覆盖相同的参数;
func (*Server) RemoveRouter ¶ added in v0.40.0
RemoveRouter 删除指定名称的路由
name 指由 Server.NewRouter 的 name 参数指定的值;
func (*Server) State ¶ added in v0.71.0
State 获取当前的状态
返回值可能会是以下值:
- Running 表示已经运行 Server.Serve;
- Stopped 默认状态,或由 Server.Close 正常结束;
func (*Server) UseMiddleware ¶ added in v0.71.0
func (srv *Server) UseMiddleware(m ...Middleware)
UseMiddleware 为所有的路由添加新的中间件
func (*Server) VisitProblems ¶ added in v0.70.0
func (srv *Server) VisitProblems(visit func(prefix, id string, status int, title, detail localeutil.LocaleStringer))
VisitProblems 遍历错误代码
visit 签名:
func(prefix, id string, status int, title, detail localeutil.LocaleStringer)
prefix 用户设置的前缀,可能为空值; id 为错误代码,不包含前缀部分; status 该错误代码反馈给用户的 HTTP 状态码; title 错误代码的简要描述; detail 错误代码的明细;
type Service ¶ added in v0.44.0
type Service interface { // Serve 运行服务 // // 这是个阻塞方法,实现者需要正确处理 [context.Context.Done] 事件。 // 如果是通过 [context.Context] 的相关操作取消的,应该返回 [context.Context.Err]。 Serve(context.Context) error }
Service 长期运行的服务需要实现的接口
type ServiceFunc ¶ added in v0.45.0
type Services ¶ added in v0.61.0
type Services struct {
// contains filtered or unexported fields
}
func (*Services) Add ¶ added in v0.71.0
func (srv *Services) Add(title localeutil.LocaleStringer, f Service)
Add 添加并运行新的服务
title 是对该服务的简要说明;
func (*Services) AddAt ¶ added in v0.71.0
func (srv *Services) AddAt(title localeutil.LocaleStringer, job JobFunc, at time.Time, delay bool)
AddAt 添加新的定时任务
title 是对该服务的简要说明; at 指定的时间点; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Services) AddCron ¶ added in v0.71.0
func (srv *Services) AddCron(title localeutil.LocaleStringer, f JobFunc, spec string, delay bool)
AddCron 添加新的定时任务
title 是对该服务的简要说明; spec cron 表达式,支持秒; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Services) AddFunc ¶ added in v0.71.0
func (srv *Services) AddFunc(title localeutil.LocaleStringer, f func(context.Context) error)
func (*Services) AddJob ¶ added in v0.71.0
func (srv *Services) AddJob(title localeutil.LocaleStringer, job JobFunc, scheduler Scheduler, delay bool)
AddJob 添加新的计划任务
title 是对该服务的简要说明; scheduler 计划任务的时间调度算法实现; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Services) AddTicker ¶ added in v0.71.0
func (srv *Services) AddTicker(title localeutil.LocaleStringer, job JobFunc, dur time.Duration, imm, delay bool)
AddTicker 添加新的定时任务
title 是对该服务的简要说明; dur 时间间隔; imm 是否立即执行一次该任务; delay 是否在任务执行完之后,才计算下一次的执行时间点。
func (*Services) Visit ¶ added in v0.71.0
func (srv *Services) Visit(visit func(title localeutil.LocaleStringer, state State, err error))
func (*Services) VisitJobs ¶ added in v0.71.0
func (srv *Services) VisitJobs(visit func(localeutil.LocaleStringer, time.Time, time.Time, State, bool, error))
Jobs 返回所有的计划任务
visit 原型为:
func(title localeutil.LocaleStringer, prev, next time.Time, state State, delay bool, err error)
title 为计划任务的说明; prev 和 next 表示任务的上一次执行时间和下一次执行时间; state 表示当前的状态; delay 表示该任务是否是执行完才开始计算下一次任务时间的; err 表示这个任务的出错状态;
type UniqueGenerator ¶ added in v0.66.0
UniqueGenerator 唯一 ID 生成器的接口
type UnmarshalFunc ¶ added in v0.61.0
UnmarshalFunc 反序列化函数原型
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package servertest 为 server 提供一些简便的测试方
|
Package servertest 为 server 提供一些简便的测试方 |