Documentation ¶
Overview ¶
Package server 服务管理
Index ¶
- Constants
- type BuildProblemFunc
- 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(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.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, 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 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 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 Paths
- type Prefix
- 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 Resource
- 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) 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 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
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
NewFilterProblem 声明用于处理过滤器的错误对象
func (*Context) NotImplemented ¶
func (*Context) PathID ¶ added in v0.78.0
PathID 获取地址参数中表示 key 的值并并转换成大于 0 的 int64
NOTE: 若需要获取多个参数,使用 [Context.Params] 会更方便。
func (*Context) PathInt64 ¶ added in v0.78.0
PathInt64 取地址参数中的 key 表示的值并尝试工转换成 int64 类型
NOTE: 若需要获取多个参数,可以使用 [Context.Params] 获取会更方便。
func (*Context) PathString ¶ added in v0.78.0
PathString 取地址参数中的 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 想输出给用户状态码,如果出错,那么最终展示给用户的状态码可能不是此值; body 表示输出的对象,该对象最终调用 Context.Marshal 编码; problem 表示 body 是否为 Problem 对象,对于 Problem 对象可能会有特殊的处理;
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) 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
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) 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 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 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
}
Queries 提供对查询参数的处理
func (*Queries) Object ¶
Object 将查询参数解析到一个对象中
具体的文档信息可以参考 https://github.com/issue9/query
如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用其接口函数。
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) }
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
GetRouter 返回指定名称的路由
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) 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 是否在任务执行完之后,才计算下一次的执行时间点。
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))
VisitJobs 返回所有的计划任务
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 提供一些简便的测试方 |