Documentation ¶
Overview ¶
Package server 服务管理
Index ¶
- Constants
- type CTXFilter
- 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(err error, id string) *Problem
- func (ctx *Context) GetVar(key any) (any, bool)
- func (ctx *Context) Header() http.Header
- func (ctx *Context) ID() string
- func (ctx *Context) IsXHR() bool
- func (ctx *Context) LanguageTag() language.Tag
- func (ctx *Context) LocalePrinter() *message.Printer
- func (ctx *Context) Logs() logs.Logs
- 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) PathID(key, id string) (int64, Responser)
- func (ctx *Context) PathInt64(key, id string) (int64, Responser)
- func (ctx *Context) PathString(key, id string) (string, Responser)
- func (ctx *Context) Paths(exitAtError bool) *Paths
- 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)
- 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) SetCookies(c ...*http.Cookie)
- 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 string, 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 Encoder
- 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) Responser
- func (v *FilterProblem) When(cond bool, f func(v *FilterProblem)) *FilterProblem
- type HandlerFunc
- type IDGenerator
- type JobFunc
- type Locale
- type MarshalFunc
- type Middleware
- type MiddlewareFunc
- type Mimetype
- type NewEncoderFunc
- type Options
- type Paths
- type Prefix
- type Problem
- func (p *Problem) Apply(ctx *Context) *Problem
- func (p *Problem) MarshalForm() ([]byte, error)
- func (p *Problem) MarshalHTML() (string, any)
- func (p *Problem) MarshalJSON() ([]byte, error)
- func (p *Problem) MarshalXML(e *xml.Encoder, start xml.StartElement) error
- func (p *Problem) WithField(key string, val any) *Problem
- func (p *Problem) WithParam(name, reason string) *Problem
- type ProblemField
- type ProblemParam
- 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 Resource
- type Responser
- type ResponserFunc
- type Router
- type RouterMatcher
- type RouterOption
- type Scheduler
- type SchedulerFunc
- 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) NewContext(w http.ResponseWriter, r *http.Request) *Context
- 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 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 CTXFilter ¶ added in v0.73.0
type CTXFilter interface {
CTXFilter(*FilterProblem)
}
CTXFilter 在 Context 关联的上下文环境中对用户提交的数据进行验证和修正
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) Error ¶
Error 将 err 输出到 ERROR 通道并尝试以指定 id 的 Problem 返回
如果 id 为空,尝试以下顺序获得值:
- err 是否是由 [web.NewHTTPError] 创建,如果是则采用 err.Status 取得 ID 值;
- 采用 problems.ProblemInternalServerError;
func (*Context) ID ¶ added in v0.66.0
ID 当前请求的唯一 ID
一般源自客户端的 X-Request-ID 报头,如果不存在,则由 Server.UniqueID 生成。
func (*Context) LanguageTag ¶ added in v0.49.0
func (*Context) LocalePrinter ¶
func (*Context) Logs ¶ added in v0.44.0
Logs 返回日志操作对象
该返回实例与 Server.Logs 是不同的, 当前返回实例的日志输出时会带上当前请求的 x-request-id 作为额外参数。
输出内容依然遵照 Server.Logs 的规则作本地化处理。
func (*Context) Mimetype ¶ added in v0.60.0
Mimetype 返回输出编码名称
problem 表示是否返回 problem 状态时的值。该值由 [Mimetype.ProblemType] 设置。
func (*Context) NewFilterProblem ¶ added in v0.74.0
func (ctx *Context) NewFilterProblem(exitAtError bool) *FilterProblem
NewFilterProblem 声明用于处理过滤器的错误对象
func (*Context) NotImplemented ¶
func (*Context) PathID ¶ added in v0.78.0
PathID 获取地址参数中表示 key 的值并转换成大于 0 的 int64
NOTE: 若需要获取多个参数,使用 Context.Paths 会更方便。
func (*Context) PathInt64 ¶ added in v0.78.0
PathInt64 取地址参数中的 key 表示的值并尝试转换成 int64 类型
NOTE: 若需要获取多个参数,可以使用 Context.Paths 获取会更方便。
func (*Context) PathString ¶ added in v0.78.0
PathString 取地址参数中的 key 表示的值并尝试转换成 string 类型
NOTE: 若需要获取多个参数,可以使用 Context.Paths 获取会更方便。
func (*Context) QueryObject ¶
QueryObject 将查询参数解析到一个对象中
func (*Context) Read ¶
Read 从客户端读取数据并转换成 v 对象
如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用该接口方法。 如果验证失败,会返回以 id 作为错误代码的 Problem 对象。
func (*Context) Render ¶
Render 向客户端输出对象
status 想输出给用户状态码,如果出错,那么最终展示给用户的状态码可能不是此值; body 表示输出的对象,该对象最终调用 Context.Marshal 编码;
func (*Context) RequestBody ¶ added in v0.68.0
RequestBody 获取用户提交的内容
此方法可多次调用且返回正确内容,但是不能对返回内容作直接修改。不存在 body 时,返回 nil。
func (*Context) SetCharset ¶ added in v0.60.0
SetCharset 设置输出的字符集
相当于重新设置了 Context.Request 的 Accept-Charset 报头,但是不会实际修改 Context.Request。
func (*Context) SetCookies ¶ added in v0.82.0
SetCookies 输出一组 Cookie
func (*Context) SetEncoding ¶ added in v0.60.0
SetEncoding 设置输出的压缩编码
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) Unwrap ¶ added in v0.60.0
func (ctx *Context) Unwrap() http.ResponseWriter
Unwrap 返回底层的 http.ResponseWriter
在 go1.20 之后,http.ResponseController 可能要用到此方法。
type Encoder ¶ added in v0.80.0
type Encoder interface { io.WriteCloser Reset(io.Writer) }
Encoder 每种压缩实例需要实现的最小接口
type Encoding ¶ added in v0.70.0
type Encoding struct { // 压缩算法的名称 Name string // 压缩算法的构建对象 Builder NewEncoderFunc // 该压缩算法支持的 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
AddFilter 添加由过滤器 f 返回的错误信息
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) Responser
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 NewEncoderFunc ¶ added in v0.80.0
type NewEncoderFunc func() Encoder
func BrotliWriter ¶ added in v0.80.0
func BrotliWriter(o brotli.WriterOptions) NewEncoderFunc
BrotliWriter 返回指定配置的 br 算法
func CompressWriter ¶ added in v0.80.0
func CompressWriter(order lzw.Order, width int) NewEncoderFunc
CompressWriter 返回指定配置的 compress 算法
func DeflateWriter ¶ added in v0.80.0
func DeflateWriter(level int) NewEncoderFunc
DeflateWriter 返回指定配置的 deflate 算法
func GZipWriter ¶ added in v0.80.0
func GZipWriter(level int) NewEncoderFunc
GZipWriter 返回指定配置的 gzip 算法
func ZstdWriter ¶ added in v0.80.0
func ZstdWriter(o ...zstd.EOption) NewEncoderFunc
ZstdWriter 返回指定配置的 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 实例的值 // // 可以为零值。 HTTPServer *http.Server // 生成唯一字符串的方法 // // 供 [Server.UniqueID] 使用。 // // 如果为空,将采用 [unique.NewDate] 作为生成方法。 IDGenerator IDGenerator // 路由选项 RoutersOptions []RouterOption // 指定获取 x-request-id 内容的报头名 // // 如果为空,则采用 [RequestIDKey] 作为默认值 RequestIDKey string // 可用的压缩类型 // // 默认为空。表示不需要该功能。 Encodings []*Encoding // 本地化的相关设置 // // 可以为空,表示根据当前服务器环境检测适当的值。 Locale *Locale // 指定可用的 mimetype // // 默认为空。 Mimetypes []*Mimetype // ProblemTypePrefix 所有 type 字段的前缀 // // 如果该值为 [ProblemAboutBlank],将不输出 ID 值;其它值则作为前缀添加。 ProblemTypePrefix string // Init 其它的一些初始化操作 // // 在此可以在用户能实际操作 [Server] 之前对 Server 进行一些操作。 Init []func(*Server) // contains filtered or unexported fields }
Options Server 的初始化参数
这些参数都有默认值,且无法在 Server 初始化之后进行更改。
type Paths ¶ added in v0.78.0
type Paths struct {
// contains filtered or unexported fields
}
Paths 提供对路径参数的处理
type Prefix ¶
type Prefix = mux.PrefixOf[HandlerFunc]
type Problem ¶ added in v0.55.0
type Problem struct { // 反馈给用户的信息 // // 其中前四个固定为 type,title,detail,status。通过 WithField 添加的字段跟随其后。 Fields []ProblemField // 用户提交对象各个字段的错误信息 Params []ProblemParam // contains filtered or unexported fields }
Problem 根据 RFC7807 实现向用户反馈非正常状态的信息
MarshalFunc 的实现者,可能需要对 Problem 进行处理以便输出更加友好的格式。
func (*Problem) MarshalForm ¶ added in v0.80.0
func (*Problem) MarshalHTML ¶ added in v0.80.0
func (*Problem) MarshalJSON ¶ added in v0.80.0
func (*Problem) MarshalXML ¶ added in v0.80.0
type ProblemField ¶ added in v0.80.0
type ProblemParam ¶ added in v0.81.0
type Queries ¶
type Queries struct {
// contains filtered or unexported fields
}
Queries 提供对查询参数的处理
type Resource ¶
type Resource = mux.ResourceOf[HandlerFunc]
type Responser ¶ added in v0.40.0
type Responser interface { // Apply 通过 [Context] 将当前内容渲染到客户端 // // 在调用 Apply 之后,就不再使用 [Responser] 对象。 // 如果你的对象支持 [sync.Pool] 的复用方式,可以在此方法中回收内存。 Apply(*Context) *Problem }
Responser 向客户端输出对象需要实现的接口
type ResponserFunc ¶ added in v0.55.0
func (ResponserFunc) Apply ¶ added in v0.55.0
func (f ResponserFunc) Apply(c *Context) *Problem
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 SchedulerFunc ¶ added in v0.81.0
type SchedulerFunc = scheduled.SchedulerFunc
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
GetRouter 返回指定名称的路由
name 指由 Server.NewRouter 的 name 参数指定的值;
func (*Server) LoadLocales ¶ added in v0.61.0
LoadLocales 加载本地化的内容
func (*Server) LocalePrinter ¶ added in v0.41.0
func (*Server) NewContext ¶
NewContext 从标准库的参数初始化 Context 对象
NOTE: 这适合从标准库的请求中创建 Context 对象, 但是部分功能会缺失,比如地址中的参数信息,以及 Context.Route 等。
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 是否在任务执行完之后,才计算下一次的执行时间点。
NOTE: 此功能依赖 Server.UniqueID。
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 是否在任务执行完之后,才计算下一次的执行时间点。
NOTE: 此功能依赖 Server.UniqueID。
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 是否在任务执行完之后,才计算下一次的执行时间点。
NOTE: 此功能依赖 Server.UniqueID。
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 是否在任务执行完之后,才计算下一次的执行时间点。
NOTE: 此功能依赖 Server.UniqueID。
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))
VisitJobs 返回所有的计划任务
visit 原型为:
func(title localeutil.LocaleStringer, prev, next time.Time, state State, delay bool, err error)
title 为计划任务的说明; prev 和 next 表示任务的上一次执行时间和下一次执行时间; state 表示当前的状态; delay 表示该任务是否是执行完才开始计算下一次任务时间的; err 表示这个任务的出错状态;
type UnmarshalFunc ¶ added in v0.61.0
UnmarshalFunc 反序列化函数原型
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package servertest 为 server 提供一些简便的测试方
|
Package servertest 为 server 提供一些简便的测试方 |