Gone框架介绍13 - Gone的Hook函数

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,推荐给你!也欢迎一起维护!
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/
如果可能,请帮忙在github上点个 ⭐️ ;万分感谢!!

什么是Hook函数

在Gone的启停过程中,支持注册4种类型的函数,这个些函数会在特定时机被执行,被称为Hook函数。

  • BeforeStart Hook函数,在Gone启动前执行,通过BeforeStart注册
  • AfterStart Hook函数,在Gone启动后执行,通过AfterStart注册
  • BeforeStop Hook函数,在Gone停止前执行,通过BeforeStop注册
  • AfterStop Hook函数,在Gone停止后执行,通过AfterStop注册

看一段代码

package main

import "github.com/gone-io/gone"

type Worker struct {
	gone.Flag
	Name string
}

type Boss struct {
	gone.Flag

	Name 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-bob"`
			boss   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函数遵循以下规则

  1. 同一种类型的Hook函数可以多次注册;
  2. BeforeStartBeforeStop Hook 函数,先注册的后执行;
  3. AfterStartAfterStop Hook 函数,先注册的先执行;
  4. 通过gone.Prepare(priest)返回的Preparer对象注册Hook 函数,支持链式调用;
  5. Preparer对象注册Hook 函数,函数支持多种类型:
    • 入参
      • 无参数
      • 匿名结构体参数,属性设置gone标签会被自动注入响应的值
    • 出参
      • 无出参
      • error参数,如果error参数不为nil,程序执行到该Hook时会抛出panic,终止运行

Gone的启动流程

  1. 复活所有埋葬的Goners
  2. 执行所有先知Goners的AfterRevive方法
  3. 天使Start方法注册为BeforeStart Hook函数;将天使Stop方法注册为BeforeStop Hook 函数;
  4. 业务代码注册 Hook 函数
  5. 按顺序执行 BeforeStart Hook 函数
  6. 按顺序执行 AfterStart Hook 函数
  7. 等待程序结束
  8. 按顺序执行BeforeStop Hook 函数
  9. 按顺序执行AfterStop Hook 函数

求赞助

如果觉得还可以,请帮忙在github上点个 ⭐️吧:
github地址:https://github.com/gone-io/gone

福利🔥添加交流群,赠送 Golang 多套 学习资料,夯实基础👍🏻👍🏻

上一篇:Gone框架介绍12 - 通过内置Goners支持数据库操作
下一篇:Gone框架介绍14 -日志输出

React Typewriter Hook是一个使用React Hooks来实现打字机效果的库。它可以帮助我们在React应用中轻松地实现打字机效果。 要使用React Typewriter Hook,我们首先需要通过npm来安装它,命令如下:npm install react-typewriter-hook。 使用React Typewriter Hook的核心代码包括引入React和useTypewriter钩子,并在组件中使用useTypewriter钩子来创建打字效果。例如,在一个名为Note的组件中,我们可以通过useTypewriter钩子传入一个字符串来实现打字效果。 具体使用React Typewriter Hook的例子可以在官方文档中查看。在使用时,我们只需要根据示例的用法将useTypewriter钩子应用在需要实现打字效果的地方即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果](https://blog.csdn.net/weixin_33924312/article/details/88613110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [React引入react-typewriter-hook实现打字效果](https://blog.csdn.net/AK852369/article/details/119819250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [react-typewriter-hook:Use使用react钩子轻松输入效果](https://download.csdn.net/download/weixin_42131276/18402977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值