Auto-close the Closers
Managing the resource lifecycle
介绍
在应用程序终止时,也即当子命令的 OnAction
结束返回之后,cmdr 将会调用 OnPostAction 回调,然后结束 App 对象的生命周期,在最后 cmdr 也会通过依次调用所有的 Close()
来关闭所有 Closers。
Closers
是一个全局的对象数组,这里登记注册了一切你想要自动关闭的资源型对象。
例如一个数据库连接对象,你可以通过实现 Peripheral
接口 Close()
并将该对象登记到 Closers
中,然后则无需关心相关资源的回收问题了。
当然,实际上回收任务将在 Close()
中被调用,而调用的时机就在 cmdr 快要结束运行之前。
下面的代码展示了如何管理资源型对象:
作为资源型对象的 dbConn 实例,由于它实现了 Open(context.Context) error
,因此 cmdr.WithPeripherals()
完成两件事:
- 将其登记到
is.Closers()
之中,实现自动释放资源和关闭对象 - 将其登记到 pre-run 清单中(通过
WithTasksSetupPeripherals()
),在子命令将要运行之前自动调用Open()
说明
在上面的示例程序中,app.OnAction()
闭包定义了根命令的响应函数,其中展示了怎么获取一个 Peripheral
对象并操作它。
dbConn 是一个数据库连接的管理对象,它实现了 Peripheral.Close()
接口,并且也实现了 cmdr 要求的 Open(ctx) error
接口。
因此,在 cmdr 命令将要被实际执行之前,&dbConn{}
这个实例将获得 Open()
机会,从而完成其自身的资源初始化。
而当 cmdr 命令实际执行完成之后,将要退出到 OS 环境之前,其 Close()
将被调用,从而完成资源清理工作。
收益
对于微服务 app 来说,WithPeripherals
是一个有利的辅助管理工具。
How is this guide?
Last updated on