app

package
v0.67.1 Latest Latest
Warning

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

Go to latest
Published: Feb 8, 2023 License: MIT Imports: 42 Imported by: 0

Documentation

Overview

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

提供了两种方式构建服务:

NOTE: 这并不一个必需的包,如果觉得不适用,可以直接采用 server.New 初始化服务。

配置文件

NewServerOfAppOf 都是通过加载配置文件对项目进行初始化。 对于配置文件各个字段的定义,可参考源代码,入口在 config.go 文件的 configOf 对象。 配置文件中除了固定的字段之外,还提供了泛型变量 User 用于指定用户自定义的额外字段。

注册函数

当前包提供大量的注册函数,以用将某些无法直接采用序列化的内容转换可序列化的。 比如通过 RegisterEncoding 将 `gzip-default` 等字符串表示成压缩方法, 方便在配置文件进行指定。

所有的注册函数处理逻辑上都相似,碰上同名的会覆盖,否则是添加。 且都提供了一些默认项,只有在用处需要额外添加自己的内容时才需要调用注册函数。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckConfigSyntax added in v0.59.1

func CheckConfigSyntax[T any](fsys fs.FS, filename string) error

CheckConfigSyntax 检测配置项语法是否正确

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 MarshalFileFunc, u UnmarshalFileFunc, 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 server.MarshalFunc, u server.UnmarshalFunc, name string)

RegisterMimetype 注册用于序列化用户提交数据的方法

name 为名称,如果存在同名,则会覆盖。

func RegisterUniqueGenerator added in v0.66.0

func RegisterUniqueGenerator(id string, b UniqueGeneratorBuilder)

RegisterUniqueGenerator 注册唯一 ID 生成器

如果同名会被覆盖。

Types

type AppOf added in v0.48.0

type AppOf[T any] struct {
	Name    string // 程序名称
	Version string // 程序版本

	// 在运行服务之前对 [server.Server] 的额外操作
	//
	// user 为用户自定义的数据结构;
	// action 为 -a 命令行指定的参数;
	Init func(s *server.Server, user *T, action string) error

	// 以服务运行的指令
	ServeActions []string

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

	// 配置文件的文件名
	//
	// 仅是文件名,相对的路径由命令行 -f 指定。如果为空,表示不采用配置文件,
	// 由一个空的 [server.Options] 初始化对象,具体可以查看 [NewServerOf] 的实现。
	//
	// 需要保证序列化方法已经由 [RegisterFileSerializer] 注册;
	ConfigFilename string

	// 生成 [server.Problem] 对象的方法
	//
	// 如果为空,则由 [server.Options] 决定其默认值。
	ProblemBuilder server.BuildProblemFunc

	// 本地化的相关设置
	//
	// LocaleFS 本地化文件所在的文件系统,如果为空则指向 [locales.Locales],
	// LocaleGlob 从 LocaleFS 中查找本地化文件的匹配模式,如果为空则为 *.yaml。
	// LocaleGlob 指定的格式必须是已经通过 [RegisterFileSerializer] 注册的。
	// 由 [localeutil.DetectUserLanguageTag] 检测当前系统环境并决定采用哪种语言。
	//
	// NOTE: panic 信息不支持本地化。
	LocaleFS   fs.FS
	LocaleGlob string

	// 每次关闭服务操作的等待时间
	ShutdownTimeout time.Duration
	// contains filtered or unexported fields
}

AppOf 提供一种简单的命令行生成方式

生成的命令行带以下几个参数:

-v 显示版本号;
-h 显示帮助信息;
-f 指定当前程序可读取的文件系统,这最终会转换成 [server.Server.FS];
-a 执行的指令,该值会传递给 [AppOf.Init],由用户根据此值决定初始化方式;

在支持 [SIGHUP] 信号的系统,会接收 SIGHUP 信号用于重启服务(调用 AppOf.Restart)。

T 表示的是配置文件中的用户自定义数据类型。

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

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

Exec 根据配置运行服务

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

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

func (*AppOf[T]) Restart added in v0.59.1

func (cmd *AppOf[T]) Restart() error

Restart 触发重启服务

该方法将关闭现有的服务,并发送运行新服务的指令,不会等待新服务启动完成, 也无法知晓新服务的状态。如果返回了错误信息, 只能表示关闭旧服务时出错或是配置文件有语法错误。

type CacheBuilder added in v0.51.1

type CacheBuilder func(dsn string) (cache.Driver, error)

type ConfigSanitizer added in v0.48.0

type ConfigSanitizer interface {
	SanitizeConfig() *errs.FieldError
}

ConfigSanitizer 对配置文件的数据验证和修正

type LogsWriterBuilder added in v0.51.1

type LogsWriterBuilder func(args []string) (logs.Writer, func() error, error)

LogsWriterBuilder 构建 logs.Writer 的方法

type MarshalFileFunc added in v0.61.0

type MarshalFileFunc = files.MarshalFunc

type UniqueGeneratorBuilder added in v0.66.0

type UniqueGeneratorBuilder func() server.UniqueGenerator

type UnmarshalFileFunc added in v0.61.0

type UnmarshalFileFunc = files.UnmarshalFunc

Jump to

Keyboard shortcuts

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