当今做啥网站致富,手机制作钓鱼网站,网站 服务器 域名,营销策划方案范文我从头到尾实现了一个Golang的依赖注入框架#xff0c;并且集成了gin、xorm、redis、cron、消息中间件等功能#xff1b;自己觉得还挺好用的#xff0c;推荐给你#xff01;也欢迎一起维护#xff01; github地址#xff1a;https://github.com/gone-io/gone 文档地址并且集成了gin、xorm、redis、cron、消息中间件等功能自己觉得还挺好用的推荐给你也欢迎一起维护 github地址https://github.com/gone-io/gone 文档地址https://goner.fun/ 如果可能请帮忙在github上点个 ⭐️ 万分感谢 文章目录 什么是Hook函数看一段代码Hook函数遵循以下规则 Gone的启动流程 什么是Hook函数
在Gone的启停过程中支持注册4种类型的函数这个些函数会在特定时机被执行被称为Hook函数。
BeforeStart Hook函数在Gone启动前执行通过BeforeStart注册AfterStart Hook函数在Gone启动后执行通过AfterStart注册BeforeStop Hook函数在Gone停止前执行通过BeforeStop注册AfterStop Hook函数在Gone停止后执行通过AfterStop注册
看一段代码
package mainimport github.com/gone-io/gonetype Worker struct {gone.FlagName string
}type Boss struct {gone.FlagName string
}func main() {gone.Prepare(func(cemetery gone.Cemetery) error {cemetery.Bury(Boss{Name: Jim}, boss-jim)cemetery.Bury(Worker{Name: Bob}, worker-bob)return nil}).BeforeStart(func() {println(第1个 BeforeStart 函数)}).BeforeStart(func(in struct {worker Worker gone:worker-bobboss Boss gone:*}) {println(第2个 BeforeStart 函数)println(boss:, in.boss.Name)println(worker:, in.worker.Name)}).BeforeStart(func() error {println(第3个 BeforeStart 函数)return nil}).Run()
}上面代码代码的执行结果如下
第3个 BeforeStart 函数
第2个 BeforeStart 函数
boss: Jim
worker: Bob
第1个 BeforeStart 函数Hook函数遵循以下规则
同一种类型的Hook函数可以多次注册BeforeStart 和 BeforeStop Hook 函数先注册的后执行AfterStart 和 AfterStop Hook 函数先注册的先执行通过gone.Prepare(priest)返回的Preparer对象注册Hook 函数支持链式调用Preparer对象注册Hook 函数函数支持多种类型 入参 无参数匿名结构体参数属性设置gone标签会被自动注入响应的值 出参 无出参error参数如果error参数不为nil程序执行到该Hook时会抛出panic,终止运行
Gone的启动流程
复活所有埋葬的Goners执行所有先知Goners的AfterRevive方法将天使的Start方法注册为BeforeStart Hook函数将天使的Stop方法注册为BeforeStop Hook 函数业务代码注册 Hook 函数按顺序执行 BeforeStart Hook 函数按顺序执行 AfterStart Hook 函数等待程序结束按顺序执行BeforeStop Hook 函数按顺序执行AfterStop Hook 函数
上一篇Gone框架介绍12 - 通过内置Goners支持数据库操作