app

package
v0.55.0 Latest Latest
Warning

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

Go to latest
Published: Aug 7, 2022 License: MIT Imports: 42 Imported by: 0

Documentation

Overview

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

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

Index

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 信息是不支持本地化。

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

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

Exec 根据配置运行服务

args 表示命令行参数,一般为 os.Args

如果是 AppOf 本身字段设置有问题会直接 panic,其它错误则返回该错误信息。

type CacheBuilder added in v0.51.1

type CacheBuilder func(dsn string) (cache.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, func() error, error)

LogsWriterBuilder 构建 LogsWriter 的方法

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳