Documentation
¶
Overview ¶
Package app 为构建程序提供相对简便的方法
app 并不是必须的,只是为用户提供了一种简便的方式构建程序, 相对地也会有诸多限制,如果觉得不适用,可以自行调用 server.New。
Index ¶
- func NewServerOf[T any](name, version string, pb server.BuildProblemFunc, 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 serializer.MarshalFunc, u serializer.UnmarshalFunc, ext ...string)
- func RegisterLogsWriter(b LogsWriterBuilder, name ...string)
- func RegisterMimetype(m serializer.MarshalFunc, u serializer.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 NewServerOf ¶ added in v0.55.0
func NewServerOf[T any](name, version string, pb server.BuildProblemFunc, 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 serializer.MarshalFunc, u serializer.UnmarshalFunc, 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 serializer.MarshalFunc, u serializer.UnmarshalFunc, name string)
RegisterMimetype 注册用于序列化用户提交数据的方法
name 为名称,如果存在同名,则会覆盖。
Types ¶
type AppOf ¶ added in v0.48.0
type AppOf[T any] struct { Name string // 程序名称 Version string // 程序版本 Desc string // 程序描述 // 在运行服务之前对 [server.Server] 的额外操作 // // 比如添加模块等。不可以为空。 // user 为用户自定义的数据结构; // action 为 -a 命令行指定的参数; Init func(s *server.Server, user *T, action string) error // 命令行输出信息的通道 // // 默认为 [os.Stdout]。 Out io.Writer // 配置文件的文件名 // // 需要保证 [RegisterFileSerializer] 能解析此文件指定的内容; // // 仅是文件名,相对的路径由命令行 -f 指定。 ConfigFilename string // 生成 [server.Problem] 对象的方法 // // 如果为空,则由 [server.Options] 决定其默认值。 ProblemBuilder server.BuildProblemFunc // 本地化 AppOf 中的命令行信息 // // 如果为空,那么这些命令行信息将显示默认内容。 Catalog catalog.Catalog // 触发退出的信号 // // 为空(nil 或是 []) 表示没有。 Signals []os.Signal // 通过信号触发退出时的等待时间 SignalTimeout time.Duration // contains filtered or unexported fields }
AppOf 提供一种简单的命令行生成方式
T 表示的是配置文件中的用户自定义数据类型,如果不需要可以设置为 struct{}。
生成的命令行带以下几个参数:
-v 显示版本号; -h 显示帮助信息; -f 指定当前程序可读取的文件系统,这最终会转换成 Server.FS; -a 执行的动作,该值会传递给 Init,由用户根据 a 决定初始化方式; -s 以服务的形式运行;
通过向 [AppOf.Catalog] 注册本地化字符串,可以让命令行支持本地化显示:
// 构建 catalog.Catalog 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()
由 localeutil.DetectUserLanguageTag 检测当前系统环境并显示,本地化命令行参数需要提供以下翻译项:
-show version -show help -set file system -action -run as server
以及 [AppOf.Desc] 的相关翻译项。
NOTE: panic 信息是不支持本地化。
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 LogsWriter = logs.Writer
type LogsWriterBuilder ¶ added in v0.51.1
type LogsWriterBuilder func(args []string) (LogsWriter, func() error, error)
LogsWriterBuilder 构建 LogsWriter 的方法