Documentation
¶
Overview ¶
Package app 为构建程序提供相对简便的方法
提供了两种方式构建服务:
- NewServerOf 从配置文件构建 server.Server 对象;
- AppOf 直接生成一个简单的命令行程序;
NOTE: 这并不一个必需的包,如果觉得不适用,可以直接采用 server.New 初始化服务。
配置文件 ¶
NewServerOf 和 AppOf 都是通过加载配置文件对项目进行初始化。 对于配置文件各个字段的定义,可参考源代码,入口在 config.go 文件的 configOf 对象。 配置文件中除了固定的字段之外,还提供了泛型变量 User 用于指定用户自定义的额外字段。
注册函数 ¶
当前包提供大量的注册函数,以用将某些无法直接采用序列化的内容转换可序列化的。 比如通过 RegisterEncoding 将 `gzip-default` 等字符串表示成压缩算法, 以便在配置文件进行指定。
所有的注册函数处理逻辑上都相似,碰上同名的会覆盖,否则是添加。 且默认情况下都提供了一些可选项,只有在用户需要额外添加自己的内容时才需要调用注册函数。
Index ¶
- func CheckConfigSyntax[T any](fsys fs.FS, filename string) error
- func NewServerOf[T any](name, version string, fsys fs.FS, filename string) (*server.Server, *T, error)
- func RegisterCache(b CacheBuilder, name ...string)
- func RegisterEncoding(id, name string, f server.NewEncodingFunc)
- func RegisterFileSerializer(m MarshalFileFunc, u UnmarshalFileFunc, ext ...string)
- func RegisterLogsWriter(b LogsWriterBuilder, name ...string)
- func RegisterMimetype(m server.MarshalFunc, u server.UnmarshalFunc, name string)
- func RegisterProblemBuilder(name string, b server.BuildProblemFunc)
- func RegisterUniqueGenerator(id string, b UniqueGeneratorBuilder)
- func SignalHUP[T any](cmd *AppOf[T])
- type AppOf
- type CacheBuilder
- type ConfigSanitizer
- type LogsWriterBuilder
- type MarshalFileFunc
- type Problem
- type UniqueGeneratorBuilder
- type UnmarshalFileFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckConfigSyntax ¶ added in v0.59.1
CheckConfigSyntax 检测配置项语法是否正确
func NewServerOf ¶ added in v0.55.0
func NewServerOf[T any](name, version string, fsys fs.FS, filename string) (*server.Server, *T, error)
NewServerOf 从配置文件初始化 server.Server 对象
fsys 项目依赖的文件系统,被用于 server.Options.FS,同时也是配置文件所在的目录; filename 用于指定项目的配置文件,相对于 fsys 文件系统。 序列化方法由 RegisterFileSerializer 注册的列表中根据 filename 的扩展名进行查找。 如果此值为空,将以 &server.Options{FS: fsys} 初始化 server.Server;
T 表示用户自定义的数据项,该数据来自配置文件中的 user 字段。 如果实现了 ConfigSanitizer 接口,则在加载后进行自检;
func RegisterCache ¶ added in v0.51.1
func RegisterCache(b CacheBuilder, name ...string)
RegisterCache 注册新的缓存方式
name 为缓存的名称,如果存在同名,则会覆盖。
func RegisterEncoding ¶ added in v0.51.1
func RegisterEncoding(id, name string, f server.NewEncodingFunc)
RegisterEncoding 注册压缩方法
id 表示此压缩方法的唯一 ID,这将在配置文件中被引用; name 表示此压缩方法的名称,可以相同; f 生成压缩对象的方法;
func RegisterFileSerializer ¶ added in v0.55.0
func RegisterFileSerializer(m MarshalFileFunc, u UnmarshalFileFunc, ext ...string)
RegisterFileSerializer 注册用于文件序列化的方法
ext 为文件的扩展名,如果存在同名,则会覆盖。
func RegisterLogsWriter ¶ added in v0.51.1
func RegisterLogsWriter(b LogsWriterBuilder, name ...string)
RegisterLogsWriter 注册日志的 LogsWriterBuilder
name 为缓存的名称,如果存在同名,则会覆盖。
func RegisterMimetype ¶ added in v0.54.0
func RegisterMimetype(m server.MarshalFunc, u server.UnmarshalFunc, name string)
RegisterMimetype 注册用于序列化用户提交数据的方法
name 为名称,如果存在同名,则会覆盖。
func RegisterProblemBuilder ¶ added in v0.70.0
func RegisterProblemBuilder(name string, b server.BuildProblemFunc)
RegisterProblemBuilder 注册用于生成 Problem 对象的方法
如果存在同名,则会覆盖。
func RegisterUniqueGenerator ¶ added in v0.66.0
func RegisterUniqueGenerator(id string, b UniqueGeneratorBuilder)
RegisterUniqueGenerator 注册唯一 ID 生成器
如果同名会被覆盖。
Types ¶
type AppOf ¶ added in v0.48.0
type AppOf[T any] struct { Name string // 程序名称 Version string // 程序版本 // 在运行服务之前对 [server.Server] 的额外操作 // // user 为用户自定义的数据结构; // action 为 -a 命令行指定的参数; Init func(s *server.Server, user *T, action string) error // 以服务运行的指令 ServeActions []string // 命令行输出信息的通道 // // 默认为 [os.Stdout]。 Out io.Writer // 配置文件的文件名 // // 仅是文件名,相对的路径由命令行 -f 指定。如果为空,表示不采用配置文件, // 由一个空的 [server.Options] 初始化对象,具体可以查看 [NewServerOf] 的实现。 // // 需要保证序列化方法已经由 [RegisterFileSerializer] 注册; ConfigFilename string // 本地化的相关设置 // // LocaleFS 本地化文件所在的文件系统,如果为空则指向 [locales.Locales], // LocaleGlob 从 LocaleFS 中查找本地化文件的匹配模式,如果为空则为 *.yaml。 // LocaleGlob 指定的文件格式必须是已经通过 [RegisterFileSerializer] 注册的。 // 由 [localeutil.DetectUserLanguageTag] 检测当前系统环境并决定采用哪种语言。 // // NOTE: 此设置仅影响命令行的本地化(panic 信息不支持本地化)。 LocaleFS fs.FS LocaleGlob string // 每次关闭服务操作的等待时间 ShutdownTimeout time.Duration // contains filtered or unexported fields }
AppOf 提供一种简单的命令行生成方式
生成的命令行带以下几个参数:
-v 显示版本号; -h 显示帮助信息; -f 指定当前程序可读取的文件系统,这最终会转换成 [server.Server.FS]; -a 执行的指令,该值会传递给 [AppOf.Init],由用户根据此值决定初始化方式;
T 表示的是配置文件中的用户自定义数据类型。
type ConfigSanitizer ¶ added in v0.48.0
type ConfigSanitizer interface {
SanitizeConfig() *errs.FieldError
}
ConfigSanitizer 对配置文件的数据验证和修正
type LogsWriterBuilder ¶ added in v0.51.1
LogsWriterBuilder 构建 logs.Writer 的方法
type MarshalFileFunc ¶ added in v0.61.0
type MarshalFileFunc = files.MarshalFunc
type Problem ¶ added in v0.70.0
type Problem struct {
// 指定生成 Problem 对象的方法
//
// 这些名称由 [RegisterProblemBuilder] 注册。当前可用的值有:
// -rfc7807
Builder string `json:"builder,omitempty" xml:"builder,omitempty" yaml:"builder,omitempty"`
// 指定代码代码的 ID 前缀
IDPrefix string `json:"idPrefix,omitempty" xml:"idPrefix,omitempty" yaml:"idPrefix,omitempty"`
// contains filtered or unexported fields
}
type UniqueGeneratorBuilder ¶ added in v0.66.0
type UniqueGeneratorBuilder func() server.UniqueGenerator
type UnmarshalFileFunc ¶ added in v0.61.0
type UnmarshalFileFunc = files.UnmarshalFunc