go get -u github.com/erkesi/gobean
每一个模块,都有测试用例,可以通过测试用例了解具体的使用方法
import github.com/erkesi/gobean/glogs
打印 gobean 项目下的包 debug 级别的日志
glogs.Init(logger Logger)
依赖注入
import github.com/erkesi/gobean/ginjects
在依赖关系的顺序下,再按照实例注入的优先级和顺序,完成实例的生命周期的管理
-
简单增加实例的生命周期管理,Struct 类型 可以实现 Init() \ Close() 来实现初始化、销毁实例
-
使用示例:inject_test.go
type B struct{
}
type A struct{
B *B `inject:""`
}
// Init, 实现 ginjects.ObjectInit 接口,完成实例的初始化
func (a *A) Init() {
}
// Close, ginjects.ObjectClose 接口,完成实例的销毁
func (a *A) Close(){
}
- 参数 opts: 可以为 ginjects.ProvideWithPriority(priority int) , 顺序【依赖关系与优先级(从大到小)】完成实例的初始化
ginjects.ProvideByValue(value interface{}, opts ...ProvideOptFunc)
ginjects.ObtainByType(value interface{}) interface{}
- 参数 opts: 可以为 ginjects.ProvideWithPriority(priority int) , 按照顺序【依赖关系与优先级(从大到小)】完成实例的初始化
ginjects.ProvideByName(name string, value interface{}, opts ...ProvideOptFunc)
ginjects.ObtainByName(name string) interface{}
ginjects.Init()
ginjects.Close()
ginjects.PrintObjects()
事件的发布与订阅
import github.com/erkesi/gobean/gevents
基于 ginjects 依赖注入的能力
使用示例:event_test.go
gevents.Register(executors ...Executor)
gevents.SetDefaultExecutor(executor Executor)
发布(接口:Publisher)
Publish(ctx context.Context, event interface{}, opts ...PublishOpt) error
使用默认的事件发布器
&DefaultPublisher{}
扩展点能力
import github.com/erkesi/gobean/gextpts
基于 ginjects 依赖注入的能力
执行的时候,依据扩展点接口,找到多个实现,按照优先级逐个匹配,如果匹配(Match() == true),则执行后返回。
gextpts.Register(et ExtensionPointer, opts ...ExtPtFunc)
gextpts.Execute(ctx context.Context, f interface{}, args ...interface{}) (bool, interface{})
gextpts.ExecuteWithErr(ctx context.Context, f interface{}, args ...interface{}) (bool, interface{}, error)
简单状态机实现
- 定义状态转移流程
- 定义状态接口
- 状态机执行
import github.com/erkesi/gobean/gstatemachines
应用启动与销毁回调函数的注册以及使用
import github.com/erkesi/gobean/gapplications
使用示例:application_test.go
- 参数 opts: 可以为 gapplications.CallbackWithPriority(priority int) , 顺序【优先级(从大到小)】执行 callback
gapplications.AddInitCallback(callback appStateCallback, opts ...OptFunc)
- 参数 opts: 可以为 gapplications.CallbackWithPriority(priority int) , 顺序【优先级(从大到小)】执行 callback
gapplications.AddCloseCallback(callback appStateCallback, opts ...OptFunc)
gapplications.Init()
gapplications.Close()