server

package
v0.79.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2023 License: MIT Imports: 39 Imported by: 2

Documentation

Overview

Package server 服务管理

Index

Constants

View Source
const (
	Stopped = scheduled.Stopped // 停止状态,默认状态
	Running = scheduled.Running // 正在运行
	Failed  = scheduled.Failed  // 出错,不再执行后续操作
)

服务的几种状态

View Source
const DefaultConfigDir = "@.config"
View Source
const RequestIDKey = "X-Request-ID"

Variables

This section is empty.

Functions

This section is empty.

Types

type BuildProblemFunc added in v0.55.0

type BuildProblemFunc func(id string, status int, title, detail string) Problem

BuildProblemFunc 生成 Problem 对象的方法

id 表示当前错误信息的唯一值,该值有可能为 about:blank,表示不想向用户展示具体的值; title 错误信息的简要描述; status 输出的状态码;

type CTXFilter added in v0.73.0

type CTXFilter interface {
	CTXFilter(*FilterProblem)
}

CTXFilter 在 Context 关联的上下文环境中对数据进行验证和修正

Context.ReadContext.QueryObject 以及 Queries.Object 中会在解析数据成功之后会调用该接口。

type Context

type Context struct {
	// contains filtered or unexported fields
}

Context 根据当次 HTTP 请求生成的上下文内容

Context 同时也实现了 http.ResponseWriter 接口, 但是不推荐非必要情况下直接使用 http.ResponseWriter 的接口方法, 而是采用返回 Responser 的方式向客户端输出内容。

func (*Context) Begin added in v0.66.2

func (ctx *Context) Begin() time.Time

Begin 当前对象的初始化时间

func (*Context) Charset added in v0.60.0

func (ctx *Context) Charset() string

Charset 输出的字符集

func (*Context) ClientIP

func (ctx *Context) ClientIP() string

ClientIP 返回客户端的 IP 地址及端口

获取顺序如下:

  • X-Forwarded-For 的第一个元素
  • Remote-Addr 报头
  • X-Read-IP 报头

func (*Context) Encoding added in v0.60.0

func (ctx *Context) Encoding() string

Encoding 输出的压缩编码名称

func (*Context) Error

func (ctx *Context) Error(id string, level logs.Level, err error) Problem

Error 将 err 输出到日志并以指定 id 的 Problem 返回

func (*Context) GetVar added in v0.71.0

func (ctx *Context) GetVar(key any) (any, bool)

GetVar 返回指定名称的变量

func (*Context) Header added in v0.48.0

func (ctx *Context) Header() http.Header

func (*Context) ID added in v0.66.0

func (ctx *Context) ID() string

ID 当前请求的唯一 ID

一般源自客户端的 X-Request-ID 报头,如果不存在,则由 Server.UniqueID 生成。

func (*Context) InternalServerError added in v0.49.0

func (ctx *Context) InternalServerError(err error) Problem

InternalServerError 输出 ERROR 通道并向返回 500 表示的 Problem 对象

func (*Context) IsXHR added in v0.44.0

func (ctx *Context) IsXHR() bool

func (*Context) LanguageTag added in v0.49.0

func (ctx *Context) LanguageTag() language.Tag

func (*Context) LocalePrinter

func (ctx *Context) LocalePrinter() *message.Printer

func (*Context) Logs added in v0.44.0

func (ctx *Context) Logs() logs.Logs

Logs 返回日志操作对象

该返回实例与 Server.Logs 是不同的, 当前返回实例的日志输出时会带上当前请求的 x-request-id 作为额外参数。

输出内容依然遵照 Server.Logs 的规则作本地化处理。

func (*Context) Marshal

func (ctx *Context) Marshal(v any) ([]byte, error)

Marshal 将对象 v 按用户要求编码并返回

func (*Context) Mimetype added in v0.60.0

func (ctx *Context) Mimetype(problem bool) string

Mimetype 输出编码名称

problem 表示是否返回 problem 时的 mimetype 值。该值由 [Mimetypes] 设置。

func (*Context) NewFilterProblem added in v0.74.0

func (ctx *Context) NewFilterProblem(exitAtError bool) *FilterProblem

NewFilterProblem 声明用于处理过滤器的错误对象

func (*Context) NotFound

func (ctx *Context) NotFound() Problem

NotFound 返回 id 值为 404 的 Problem 对象

func (*Context) NotImplemented

func (ctx *Context) NotImplemented() Problem

func (*Context) OnExit added in v0.49.0

func (ctx *Context) OnExit(f func(*Context, int))

OnExit 注册退出当前请求时的处理函数

func (*Context) PathID added in v0.78.0

func (ctx *Context) PathID(key, id string) (int64, Responser)

PathID 获取地址参数中表示 key 的值并并转换成大于 0 的 int64

NOTE: 若需要获取多个参数,使用 [Context.Params] 会更方便。

func (*Context) PathInt64 added in v0.78.0

func (ctx *Context) PathInt64(key, id string) (int64, Responser)

PathInt64 取地址参数中的 key 表示的值并尝试工转换成 int64 类型

NOTE: 若需要获取多个参数,可以使用 [Context.Params] 获取会更方便。

func (*Context) PathString added in v0.78.0

func (ctx *Context) PathString(key, id string) (string, Responser)

PathString 取地址参数中的 key 表示的值并尝试工转换成 string 类型

NOTE: 若需要获取多个参数,可以使用 [Context.Params] 获取会更方便。

func (*Context) Paths added in v0.78.0

func (ctx *Context) Paths(exitAtError bool) *Paths

Paths 声明一个用于获取路径参数的对象

返回对象的生命周期在 Context 结束时也随之结束。

func (*Context) Problem added in v0.55.0

func (ctx *Context) Problem(id string) Problem

Problem 返回批定 id 的错误信息

id 通过此值从 Problems 中查找相应在的 title 并赋值给返回对象;

func (*Context) Queries

func (ctx *Context) Queries(exitAtError bool) (*Queries, error)

Queries 声明一个用于获取查询参数的对象

返回对象的生命周期在 Context 结束时也随之结束。

func (*Context) QueryObject

func (ctx *Context) QueryObject(exitAtError bool, v any, id string) Responser

QueryObject 将查询参数解析到一个对象中

func (*Context) Read

func (ctx *Context) Read(exitAtError bool, v any, id string) Responser

Read 从客户端读取数据并转换成 v 对象

如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用其接口函数。 如果验证失败,会输出以 id 作为错误代码的 Responser 对象。

func (*Context) Render

func (ctx *Context) Render(status int, body any, problem bool)

Render 向客户端输出对象

status 想输出给用户状态码,如果出错,那么最终展示给用户的状态码可能不是此值; body 表示输出的对象,该对象最终调用 Context.Marshal 编码; problem 表示 body 是否为 Problem 对象,对于 Problem 对象可能会有特殊的处理;

func (*Context) Request

func (ctx *Context) Request() *http.Request

Request 返回原始的请求对象

func (*Context) RequestBody added in v0.68.0

func (ctx *Context) RequestBody() (body []byte, err error)

RequestBody 获取用户提交的内容

相对于 [Context.Request.Body],此函数可多次读取。不存在 body 时,返回 nil

func (*Context) Route added in v0.55.3

func (ctx *Context) Route() types.Route

Route 关联的路由信息

func (*Context) Server

func (ctx *Context) Server() *Server

Server 获取关联的 Server 实例

func (*Context) SetCharset added in v0.60.0

func (ctx *Context) SetCharset(charset string)

SetCharset 设置输出的字符集

相当于重新设置了 Context.Request 的 Accept-Charset 报头,但是不会实际修改 Context.Request

func (*Context) SetEncoding added in v0.60.0

func (ctx *Context) SetEncoding(enc string)

SetEncoding 设置压缩编码

相当于重新设置了 Context.Request 的 Accept-Encoding 报头,但是不会实际修改 Context.Request

func (*Context) SetLanguage added in v0.49.0

func (ctx *Context) SetLanguage(tag language.Tag)

SetLanguage 修改输出的语言

相当于重新设置了 Context.Request 的 Accept-Language 报头,但是不会实际修改 Context.Request

func (*Context) SetMimetype added in v0.60.0

func (ctx *Context) SetMimetype(mimetype string)

SetMimetype 设置输出的格式

相当于重新设置了 Context.Request 的 Accept 报头,但是不会实际修改 Context.Request

func (*Context) SetVar added in v0.71.0

func (ctx *Context) SetVar(key, val any)

SetVar 设置变量

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 string, v ...any) string

Sprintf 将内容翻译成当前请求的语言

func (*Context) Unmarshal

func (ctx *Context) Unmarshal(v any) error

Unmarshal 将提交的内容转换成 v 对象

func (*Context) Unwrap added in v0.60.0

func (ctx *Context) Unwrap() http.ResponseWriter

Unwrap 返回底层的 http.ResponseWriter

在 go1.20 之后,http.ResponseController 可能要用到此方法。

func (*Context) Write added in v0.48.0

func (ctx *Context) Write(bs []byte) (int, error)

Write 向客户端输出内容

如非必要,应该返回 Responser 进行输出。

func (*Context) WriteHeader added in v0.48.0

func (ctx *Context) WriteHeader(status int)

WriteHeader 向客户端输出 HTTP 代码

如非必要,应该返回 Responser 进行输出。

func (*Context) Wrote added in v0.59.7

func (ctx *Context) Wrote() bool

Wrote 是否已经有内容输出

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

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

type HandlerFunc func(*Context) Responser

HandlerFunc 路由的处理函数

向客户端输出内容的有两种方法,一种是通过 Context.Write 方法; 或是返回 Responser 对象。前者在调用 Context.Write 时即输出内容, 后者会在整个请求退出时才将 Responser 进行编码输出。

返回值可以为空,表示在中间件执行过程中已经向客户端输出同内容。

type JobFunc added in v0.71.0

type JobFunc = scheduled.JobFunc

type Locale added in v0.70.0

type Locale struct {
	// 默认的语言标签
	//
	// 在用户请求的报头中没有匹配的语言标签时,会采用此值作为该用户的本地化语言,
	// 同时也用来初始化 [Server.LocalePrinter]。
	//
	// 如果为空,则会尝试读取当前系统的本地化信息。
	Language language.Tag

	// 本地化的数据
	//
	// 如果为空,则会被初始化成一个空对象。
	Catalog *catalog.Builder
	// contains filtered or unexported fields
}

type MarshalFunc added in v0.61.0

type MarshalFunc func(*Context, any) ([]byte, error)

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 提供对路径参数的处理

func (*Paths) Bool added in v0.78.0

func (p *Paths) Bool(key string) bool

Bool 获取参数 key 所代表的值并转换成 bool

strconv.ParseBool 进行转换。

func (*Paths) Float64 added in v0.78.0

func (p *Paths) Float64(key string) float64

Float64 获取参数 key 所代表的值并转换成 float64

func (*Paths) ID added in v0.78.0

func (p *Paths) ID(key string) int64

ID 返回 key 所表示的值且必须大于 0

func (*Paths) Int64 added in v0.78.0

func (p *Paths) Int64(key string) int64

Int64 获取参数 key 所代表的值并转换成 int64 类型

func (*Paths) Problem added in v0.78.0

func (p *Paths) Problem(id string) Responser

Problem 将当前对象转换成 Problem 对象

仅在处理参数时有错误的情况下,才会转换成 Problem 对象,否则将返回空值。

func (*Paths) String added in v0.78.0

func (p *Paths) String(key string) string

String 获取参数 key 所代表的值并转换成 string

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

func RFC7807Builder(id string, status int, title, detail string) Problem

RFC7807Builder BuildProblemFuncRFC7807 标准实现

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) Bool

func (q *Queries) Bool(key string, def bool) bool

Bool 从查询参数中获取指定名称的值

若不存在则返回 def 作为其默认值。若是无法转换,则会保存错误信息并返回 def。

func (*Queries) Float64

func (q *Queries) Float64(key string, def float64) float64

Float64 从查询参数中获取指定名称的值

若不存在则返回 def 作为其默认值。若是无法转换,则会保存错误信息并返回 def。

func (*Queries) Int

func (q *Queries) Int(key string, def int) int

Int 从查询参数中获取指定名称的值

若不存在则返回 def 作为其默认值。若是无法转换,则会保存错误信息并返回 def。

func (*Queries) Int64

func (q *Queries) Int64(key string, def int64) int64

Int64 从查询参数中获取指定名称的值

若不存在则返回 def 作为其默认值。若是无法转换,则会保存错误信息并返回 def。

func (*Queries) Object

func (q *Queries) Object(v any, id string)

Object 将查询参数解析到一个对象中

具体的文档信息可以参考 https://github.com/issue9/query

如果 v 实现了 CTXFilter 接口,则在读取数据之后,会调用其接口函数。

func (*Queries) Problem added in v0.55.0

func (q *Queries) Problem(id string) Responser

Problem 将当前对象转换成 Problem 对象

仅在处理参数时有错误的情况下,才会转换成 Problem 对象,否则将返回空值。

func (*Queries) String

func (q *Queries) String(key, def string) string

String 从查询参数中获取指定名称的值

若不存在则返回 def 作为其默认值。

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 RouterMatcher = group.Matcher

type RouterOption added in v0.71.0

type RouterOption = mux.Option

type Scheduler added in v0.44.0

type Scheduler = scheduled.Scheduler

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server web 服务对象

func New

func New(name, version string, o *Options) (*Server, error)

New 新建 web 服务

name, version 表示服务的名称和版本号; o 指定了初始化 Server 一些带有默认值的参数。

func (*Server) AddProblem added in v0.70.0

func (srv *Server) AddProblem(id string, status int, title, detail localeutil.LocaleStringer) *Server

AddProblem 添加新的错误代码

func (*Server) Cache

func (srv *Server) Cache() cache.CleanableCache

Cache 返回缓存的相关接口

func (*Server) CatalogBuilder added in v0.55.0

func (srv *Server) CatalogBuilder() *catalog.Builder

func (*Server) Close

func (srv *Server) Close(shutdownTimeout time.Duration)

Close 关闭服务

无论是否出错,该操作最终都会导致 Server.Serve 的退出。 调用此方法表示 Server 的生命周期结束,对象将处于不可用状态。

func (*Server) Config added in v0.75.0

func (srv *Server) Config() *config.Config

Config 配置文件的相关操作

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

func (srv *Server) GetRouter(name string) *Router

GetRouter 返回指定名称的路由

name 指由 Server.NewRouter 的 name 参数指定的值;

func (*Server) Language added in v0.71.0

func (srv *Server) Language() language.Tag

Language 返回默认的语言标签

func (*Server) LoadLocales added in v0.61.0

func (srv *Server) LoadLocales(fsys fs.FS, glob string) error

LoadLocales 加载本地化的内容

func (*Server) LocalePrinter added in v0.41.0

func (srv *Server) LocalePrinter() *message.Printer

func (*Server) Location

func (srv *Server) Location() *time.Location

Location 指定服务器的时区信息

func (*Server) Logs

func (srv *Server) Logs() logs.Logs

Logs 返回日志对象

所有日志接口都会根据 Server.LocalePrinter 进行本地化,规则如下:

func (*Server) Name

func (srv *Server) Name() string

Name 应用的名称

func (*Server) NewContext

func (srv *Server) NewContext(w http.ResponseWriter, r *http.Request) *Context

NewContext 从标准库的参数初始化 Context 对象

NOTE: 这适合从标准库的请求中创建 Context 对象, 但是部分功能会缺失,比如地址中的参数信息,以及 Context.Route 等。

func (*Server) NewPrinter added in v0.55.0

func (srv *Server) NewPrinter(tag language.Tag) *message.Printer

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) Now

func (srv *Server) Now() time.Time

Now 返回当前时间

time.Now 的区别在于 Now() 基于当前时区

func (*Server) OnClose added in v0.44.0

func (srv *Server) OnClose(f ...func() error)

OnClose 注册关闭服务时需要执行的函数

NOTE: 按注册的相反顺序执行。

func (*Server) Open

func (srv *Server) Open(name string) (fs.File, error)

func (*Server) ParseTime

func (srv *Server) ParseTime(layout, value string) (time.Time, error)

ParseTime 分析基于当前时区的时间

func (*Server) RemoveRouter added in v0.40.0

func (srv *Server) RemoveRouter(name string)

RemoveRouter 删除指定名称的路由

name 指由 Server.NewRouter 的 name 参数指定的值;

func (*Server) Routers added in v0.44.0

func (srv *Server) Routers() []*Router

Routers 返回路由列表

func (*Server) Serve

func (srv *Server) Serve() (err error)

Serve 开始 HTTP 服务

这是个阻塞方法,会等待 Server.Close 执行完之后才返回。

func (*Server) Services

func (srv *Server) Services() *Services

Services 服务管理接口

func (*Server) State added in v0.71.0

func (srv *Server) State() State

State 获取当前的状态

返回值可能会是以下值:

func (*Server) UniqueID added in v0.66.0

func (srv *Server) UniqueID() string

UniqueID 生成唯一性的 ID

func (*Server) Uptime

func (srv *Server) Uptime() time.Time

Uptime 当前服务的运行时间

func (*Server) UseMiddleware added in v0.71.0

func (srv *Server) UseMiddleware(m ...Middleware)

UseMiddleware 为所有的路由添加新的中间件

func (*Server) Vars added in v0.42.0

func (srv *Server) Vars() *sync.Map

Vars 操纵共享变量的接口

func (*Server) Version

func (srv *Server) Version() string

Version 应用的版本

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 ServiceFunc func(context.Context) error

func (ServiceFunc) Serve added in v0.71.0

func (f ServiceFunc) Serve(ctx context.Context) error

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 State added in v0.71.0

type State = scheduled.State

State 服务状态

以下设置用于 restdoc

@type string @enum stopped running failed

type UniqueGenerator added in v0.66.0

type UniqueGenerator interface {
	Service

	// String 返回字符串类型的唯一 ID 值
	String() string
}

UniqueGenerator 唯一 ID 生成器的接口

type UnmarshalFunc added in v0.61.0

type UnmarshalFunc func([]byte, any) error

UnmarshalFunc 反序列化函数原型

Directories

Path Synopsis
Package servertest 为 server 提供一些简便的测试方
Package servertest 为 server 提供一些简便的测试方

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL