app

package
v0.53.1 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2022 License: MIT Imports: 32 Imported by: 0

Documentation

Overview

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

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](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 注册新的缓存方式

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)

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

	// 配置文件的文件名
	//
	// 仅是文件名,相对的路径由命令行 -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{}。

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

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

Exec 执行命令行操作

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

type CacheBuilder added in v0.51.1

type CacheBuilder func(dsn string) (server.Cache, error)

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, server.CleanupFunc, error)

LogsWriterBuilder 构建 LogsWriter 的方法

Jump to

Keyboard shortcuts

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