app

package
v0.50.3 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2022 License: MIT Imports: 30 Imported by: 0

Documentation

Overview

Package app 提供构建程序的简便方法

NOTE: app 并不是必须的,只是为用户提供了一种简便的方式构建程序, 相对地也会有诸多限制,如果觉得不适用,可以自行调用 server.New。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewOptionsOf added in v0.48.0

func NewOptionsOf[T any](l *logs.Logs, files *serialization.Files, fsys fs.FS, filename string) (*server.Options, *T, error)

NewOptionsOf 从配置文件初始化 server.Options 实例

l 日志系统; files 指定从文件到对象的转换方法,同时用于配置文件和翻译内容; fsys 项目依赖的文件系统,被用于 server.Options.FS,同时也是配置文件所在的目录; filename 用于指定项目的配置文件,根据扩展由 serialization.Files 负责在 fsys 查找文件加载;

T 表示用户自定义的数据项,该数据来自配置文件中的 user 字段。 如果实现了 ConfigSanitizer 接口,则在加载后进行自检;

NOTE: 并不是所有的 server.Options 字段都是可序列化的,部分字段,比如 RouterOptions 需要用户在返回的对象上,自行作修改,当然这些本身有默认值,不修改也可以正常使用。

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

	// 项目的日志系统
	//
	// 如果为空,那么会初始化一个不输出任何内容的空对象。
	Logs *logs.Logs

	// 在初始化 Server 之前对 Options 的二次处理
	//
	// 可以为空。
	Options func(*server.Options)

	// 命令行输出信息的通道
	//
	// 默认为 os.Stdout。
	Out io.Writer

	// 日志的输出对象
	//
	// 可以为空。
	LogsWriter logs.Writer

	// 配置文件的加载器
	//
	// 为空则会给定一个能解析 .xml、.yaml、.yml 和 .json 文件的默认对象。
	// 该值可能会被 Options 操作所覆盖。
	Files *serialization.Files

	// 配置文件的文件名
	//
	// 仅是文件名,相对的路径由命令行 -f 指定。
	// 如果为空,则直接采用 &Options{} 初始化 Server 对象。
	ConfigFilename string

	// 本地化的相关操作接口
	//
	// 如果为空,则会被初始化一个空对象,该值可能会被 Options 操作所覆盖。
	Catalog *catalog.Builder

	// 触发退出的信号
	//
	// 为空(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{}。

func (*AppOf[T]) Exec added in v0.48.0

func (cmd *AppOf[T]) Exec(args []string) error

Exec 执行命令行操作

args 表示命令行参数,一般为 os.Args,采用明确的参数传递,方便测试用。

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 对配置文件的数据验证和修正接口

Jump to

Keyboard shortcuts

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