Documentation
¶
Overview ¶
Package app 提供构建程序的简便方法
app 并不是必须的,只是为用户提供了一种简便的方式构建程序, 相对地也会有诸多限制,如果觉得不适用,可以自行调用 server.New。
Index ¶
- func NewOptionsOf[T any](files *serialization.Files, fsys fs.FS, filename string) (*server.Options, *T, error)
- func RegisterCache(b CacheBuilder, name ...string)
- func RegisterEncoding(f serialization.EncodingWriterFunc, name string)
- func RegisterLogsWriter(b LogsWriterBuilder, name ...string)
- func RegisterMimetype(m serialization.MarshalFunc, u serialization.UnmarshalFunc, name string)
- type AppOf
- type CacheBuilder
- type ConfigError
- type ConfigSanitizer
- type LogsWriter
- type LogsWriterBuilder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewOptionsOf ¶ added in v0.48.0
func NewOptionsOf[T any](files *serialization.Files, fsys fs.FS, filename string) (*server.Options, *T, error)
NewOptionsOf 从配置文件初始化 server.Options 实例
并不是所有的 server.Options 字段都能从 NewOptionsOf 中获得值, 像 Mimetypes、ResultBuilder 等可能改变程序行为的字段, 并不允许从配置文件中进行修改。
opt, user, err := app.NeOptionsOf(...)
opt.Mimetypes = serialization.NewMimetypes()
opt.Mimetypes.Add(...)
srv := server.New("app", "1.0.0", opt)
files 指定从文件到对象的转换方法,同时用于配置文件和翻译内容; fsys 项目依赖的文件系统,被用于 server.Options.FS,同时也是配置文件所在的目录; filename 用于指定项目的配置文件,根据扩展由 serialization.Files 负责在 fsys 查找文件加载;
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(f serialization.EncodingWriterFunc, name string)
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 serialization.MarshalFunc, u serialization.UnmarshalFunc, name string)
RegisterMimetype 注册 mimetype
name 为缓存的名称,如果存在同名,则会覆盖。
Types ¶
type AppOf ¶ added in v0.48.0
type AppOf[T any] struct { Name string // 程序名称 Version string // 程序版本 // 在运行服务之前对 Server 的额外操作 // // 比如添加模块等。不可以为空。 Init func(s *server.Server, user *T, action string) error // 在初始化 Server 之前对 Options 的二次处理 // // 可以为空。 Options func(*server.Options) error // 命令行输出信息的通道 // // 默认为 os.Stdout。 Out io.Writer // 配置文件的加载器 // // 为空则会给定一个能解析 .xml、.yaml、.yml 和 .json 文件的默认对象。 // 该值也也会传递给 server.Options 对象如果不需要可用 Options 字段进行修改。 FileSerializers *serialization.Files // 配置文件的文件名 // // 需要保证 FileSerializers 能解析此文件指定的内容; // // 仅是文件名,相对的路径由命令行 -f 指定。 // 如果为非空,那么会传递给 NewOptionsOf 函数。 // 如果为空,则直接采用 &Options{} 初始化 Server 对象。 // 之后可以通过 Options 字段对内容进行初始化。 ConfigFilename string // 本地化 AppOf 中的命令行信息 // // 可以为空,那么这些命令行信息将显示默认内容。 // 这与 server.Server.Catalog 并不是同一个对象。 Catalog catalog.Catalog // 触发退出的信号 // // 为空(nil 或是 []) 表示没有。 Signals []os.Signal // 通过信号触发退出时的等待时间 SignalTimeout time.Duration // contains filtered or unexported fields }
AppOf 提供一种简单的命令行生成方式
生成的命令行带以下几个参数:
- v 显示版本号;
- h 显示帮助信息;
- f 指定当前程序可读取的文件系统,这最终会转换成 Server.FS;
- a 执行的动作,该值会传递给 Init,由用户根据 a 决定初始化方式;
- s 以服务的形式运行;
本地化信息采用当前用户的默认语言, 由 github.com/issue9/localeutil.DetectUserLanguageTag 决定。 如果想让 AppOf 支持本地化操作,最起码需要向 Catalog 注册命令行参数的本地化信息:
-v show version -h show help -f set file system -a action -s run as server
对于 AppOf 的初始化错误产生的 panic 信息是不支持本地的。
// 本地化命令行的帮助信息
builder := catalog.NewBuilder()
builder.SetString("show help", "显示帮助信息")
builder.SetString("show version", "显示版本信息")
cmd := &app.AppOf[struct{}]{
Name: "app",
Version: "1.0.0",
Init: func(s *Server) error {...},
Catalog: builder,
}
cmd.Exec()
T 表示的是配置文件中的用户自定义数据类型,如果不需要可以设置为 struct{}。
type ConfigError ¶ added in v0.48.0
type ConfigError struct {
Path string // 配置文件的路径
Field string // 字段名
Message any // 错误信息
Value any // 字段的原始值
}
ConfigError 表示配置内容字段错误
func (*ConfigError) Error ¶ added in v0.48.0
func (err *ConfigError) Error() string
func (*ConfigError) LocaleString ¶ added in v0.48.0
func (err *ConfigError) LocaleString(p *message.Printer) string
type ConfigSanitizer ¶ added in v0.48.0
type ConfigSanitizer interface {
SanitizeConfig() *ConfigError
}
ConfigSanitizer 对配置文件的数据验证和修正接口
type LogsWriter ¶ added in v0.51.1
type LogsWriterBuilder ¶ added in v0.51.1
type LogsWriterBuilder func(args []string) (LogsWriter, server.CleanupFunc, error)
LogsWriterBuilder 构建 LogsWriter 的方法