app

package
v0.86.0 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 2023 License: MIT Imports: 49 Imported by: 0

Documentation

Overview

Package app 提供了简便的方式初始化 web.Server

目前有以下几种方式:

配置文件

NewServerOfCLIOf 都是通过加载配置文件对项目进行初始化。 对于配置文件各个字段的定义,可参考当前目录下的 CONFIG.html。 配置文件中除了固定的字段之外,还提供了泛型变量 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](configDir, filename string) error

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

func NewPrinter added in v0.72.0

func NewPrinter(fsys fs.FS, glob string) (*message.Printer, error)

NewPrinter 根据参数构建一个本地化的打印对象

语言由 localeutil.DetectUserLanguageTag 决定。 参数指定了本地化的文件内容。

func NewServerOf added in v0.55.0

func NewServerOf[T any](name, version string, configDir, filename string) (web.Server, *T, error)

NewServerOf 从配置文件初始化 web.Server 对象

configDir 项目配置文件所在的目录; filename 用于指定项目的配置文件,相对于 configDir 文件系统。 序列化方法由 RegisterFileSerializer 注册的列表中根据 filename 的扩展名进行查找。 如果此值为空,将以 &web.Options{} 初始化 web.Server

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

func RegisterCache added in v0.51.1

func RegisterCache(b CacheBuilder, name ...string)

RegisterCache 注册新的缓存方式

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

func RegisterCompression added in v0.86.0

func RegisterCompression(id string, c web.Compressor)

RegisterCompression 注册压缩方法

id 表示此压缩方法的唯一 ID,这将在配置文件中被引用; c 压缩算法;

func RegisterFileSerializer added in v0.55.0

func RegisterFileSerializer(name string, m MarshalFileFunc, u UnmarshalFileFunc, ext ...string)

RegisterFileSerializer 注册用于文件序列化的方法

ext 为文件的扩展名; name 为当前数据的名称,如果存在同名,则会覆盖;

func RegisterIDGenerator added in v0.81.0

func RegisterIDGenerator(id string, b IDGeneratorBuilder)

RegisterIDGenerator 注册唯一 ID 生成器

如果同名会被覆盖。

func RegisterLogsHandler added in v0.78.0

func RegisterLogsHandler(b LogsHandlerBuilder, name ...string)

RegisterLogsHandler 注册日志的 [LogsWriterBuilder]

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

func RegisterMimetype added in v0.54.0

func RegisterMimetype(m web.MarshalFunc, u web.UnmarshalFunc, name string)

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

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

func SignalHUP added in v0.70.0

func SignalHUP(s ServerApp)

SignalHUP 让 s 根据 HUP 信号重启服务

Types

type App

type App struct {
	// 构建新服务的方法
	//
	// 每次重启服务时,都将由此方法生成一个新的服务。
	NewServer func() (web.Server, error)

	// 重启之前需要做的操作
	//
	// 可以为空。如果返回值不为 nil,将中止当前操作,但不影响旧服务。
	Before func() error

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

App 简单的 web.Server 管理

func (*App) Exec added in v0.45.0

func (app *App) Exec() (err error)

Exec 运行服务

func (*App) RestartServer added in v0.79.0

func (app *App) RestartServer()

RestartServer 触发重启服务

该方法将关闭现有的服务,并发送运行新服务的指令,不会等待新服务启动完成。

type CLIOf added in v0.72.0

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

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

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

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

	// 配置文件所在的目录
	//
	// 这也将影响后续 [web.Options.Config] 变量,如果为空,则会采用 [web.DefaultConfigDir]。
	//
	// 有以下几种前缀用于指定不同的保存目录:
	//  - ~ 表示系统提供的配置文件目录,比如 Linux 的 XDG_CONFIG、Windows 的 AppData 等;
	//  - @ 表示当前程序的主目录;
	//  - ^ 表示绝对路径;
	//  - # 表示工作路径;
	//  - 其它则是直接采用 [config.Dir] 初始化。
	// 如果为空则采用 [web.DefaultConfigDir] 中指定的值。
	//
	// NOTE: 具体说明可参考 [config.BuildDir] 的 dir 参数。
	ConfigDir string

	// 配置文件的文件名
	//
	// 相对于 ConfigDir 的文件名,不能为空。
	//
	// 需要保证序列化方法已经由 [RegisterFileSerializer] 注册;
	ConfigFilename string

	// 本地化的相关设置
	//
	// 若为空,则以 NewPrinter(locales.Locales, "*.yml") 进行初始化。
	//
	// NOTE: 此设置仅影响命令行的本地化(panic 信息不支持本地化),[web.Server] 的本地化由其自身管理。
	Printer *message.Printer

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

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

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

  • -v 显示版本号;
  • -h 显示帮助信息;
  • -a 执行的指令,该值会传递给 [CLIOf.Init],由用户根据此值决定初始化方式;

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

func (*CLIOf[T]) Exec added in v0.72.0

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

Exec 根据配置运行服务

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

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

func (*CLIOf[T]) FlagSet added in v0.72.0

func (cmd *CLIOf[T]) FlagSet(helpFlag bool, fs *flag.FlagSet) (do func(io.Writer) error)

FlagSet 将当前对象的所有参数向 flag.FlagSet 注册

helpFlag 是否添加帮助选项。 如果是独立使用的建议设置为 true。 作为子命令使用的可以设置为 false。 fs 用于接收命令行的参数。

do 表示实际执行的方法,其签名为 `func(w io.Writer) error`,w 表示处理过程中的输出通道。

func (*CLIOf[T]) RestartServer added in v0.79.0

func (cmd *CLIOf[T]) RestartServer()

RestartServer 触发重启服务

该方法将关闭现有的服务,并发送运行新服务的指令,不会等待新服务启动完成。

type CacheBuilder added in v0.51.1

type CacheBuilder = func(dsn string) (drv cache.Driver, job *Job, err error)

CacheBuilder 构建缓存客户端的方法

drv 为缓存客户端对象; 如果是服务端客户端一体的,可通过 job 来指定服务端的定时回收任务;

type IDGeneratorBuilder added in v0.81.0

type IDGeneratorBuilder = func() (f server.IDGenerator, srv web.Service)

IDGeneratorBuilder 构建生成唯一 ID 的方法

f 表示生成唯一 ID 的方法; 表示如果 f 的返回是依赖服务的,那么 srv 即为该服务。 否则 srv 为空。

type Job added in v0.81.0

type Job struct {
	Ticker time.Duration
	Job    scheduled.JobFunc
}

type LogsHandlerBuilder added in v0.78.0

type LogsHandlerBuilder = func(args []string) (logs.Handler, func() error, error)

LogsHandlerBuilder 构建 logs.Handler 的方法

type MarshalFileFunc added in v0.61.0

type MarshalFileFunc = config.MarshalFunc

type ServerApp added in v0.79.0

type ServerApp interface {
	// RestartServer 重启服务
	//
	// 中止旧的 [web.Server],再启动一个新的 [web.Server] 对象。
	//
	// 如果执行过程中出错,应该尽量阻止旧对象被中止,保证最大限度地可用状态。
	RestartServer()
}

ServerApp 实现对 web.Server 的管理

type UnmarshalFileFunc added in v0.61.0

type UnmarshalFileFunc = config.UnmarshalFunc

Jump to

Keyboard shortcuts

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