passer

package module
v0.0.7 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2024 License: MIT Imports: 7 Imported by: 0

README

Passer

Passer是一个Go语言编写的通用函数执行和序列化组件。

简介

Passer可以注册和执行各种函数,并且支持类型安全的序列化与反序列化。主要功能包括:

  • 支持函数注册与执行
  • 通用的类型安全序列化/反序列化
  • 并发安全设计
  • 结果超时控制

用法

1. 创建Passer
p := passer.NewPasser[int]()
2. 注册函数
func add(cxt context.Context, args AddArgs) (int, error) {
  // ...
}

p.Register(AddArgs{}, add) 
3. 执行函数
data, _ := p.PackToBytes(AddArgs{A: 1, B: 2}) 

result, err := p.ExecuteWithBytes(context.Background(), data)
4. 超时控制
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

result, err := p.ExecuteWithBytes(ctx, data) 

开源许可

Passer 使用MIT开源许可证,欢迎大家使用和贡献!

贡献指南

  • Fork 代码并提交PR
  • 提交issue反馈问题
  • 代码Review

联系作者

email: [email protected]

欢迎讨论Passer的设计与实现!

Documentation

Overview

包 passer 实现了通用的函数执行和序列化功能。

Index

Constants

This section is empty.

Variables

View Source
var ErrCanceled = context.Canceled
View Source
var ErrUnknown = errors.New("unknown data type, unable to execute")

Functions

This section is empty.

Types

type Dofunc

type Dofunc[RESULT any] func(ctx context.Context, obj any) (RESULT, error)

Dofunc 定义了一个泛型函数签名,它接收一个上下文和任意类型参数,并返回指定泛型类型的结果和错误。

type Passer

type Passer[RESULT any] struct {
	// contains filtered or unexported fields
}

Passer 结构体用于管理所有已注册函数的信息,通过互斥锁保证线程安全。

func NewPasser

func NewPasser[RESULT any]() *Passer[RESULT]

NewPasser 创建并初始化一个新的 Passer 实例。

func (*Passer[RESULT]) ExecuteWithBytes

func (p *Passer[RESULT]) ExecuteWithBytes(ctx context.Context, data []byte) (RESULT, error)

ExecuteWithBytes 根据序列化后的字节数组还原数据类型并执行相应的注册函数。 参数:

ctx 是一个上下文对象,可用于取消或超时操作
data 是之前由 PackToBytes 生成的序列化字节数组

返回:

泛型结果类型 RESULT 的实例,以及执行过程中的错误

func (*Passer[RESULT]) HasRegister added in v0.0.7

func (p *Passer[RESULT]) HasRegister(t any) bool

HasRegister 坚持注册函数是否存在

func (*Passer[RESULT]) PackToBytes

func (p *Passer[RESULT]) PackToBytes(obj any) ([]byte, error)

PackToBytes 将给定的数据对象序列化成字节数组,其中包括类型标识和序列化后的数据。 参数:

obj 是要序列化的任意数据对象

返回:

序列化后的字节数组,以及可能出现的错误

func (*Passer[RESULT]) RegisterPasser

func (p *Passer[RESULT]) RegisterPasser(t any, do Dofunc[RESULT])

RegisterPasser 注册一个函数到 Passer 中,使得在后续执行过程中可以根据数据类型调用对应的函数。 注意不返回已经存在的函数 参数:

t 代表要处理的数据类型实例
do 是一个符合 Dofunc 签名的函数,用于处理 ctx 上下文和类型 t 的数据

Jump to

Keyboard shortcuts

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