-
在项目 module 文件夹下新建一个包,包名建议使用驼峰命名法,例如 myTest。
-
在包中新建模块入口文件,如
init.go
-
定义模块核心结构,实现模块注册
-
填充模块接口方法:
Module
接口定义了以下几个方法:这里只做简单介绍,详细使用说明见 代码注释。-
GetModuleInfo() : 用于获取模块信息。一般照抄,修改模块名称和相应字符串即可
-
Init(): 第一次模块初始化。初始化本模块内部的内容。
-
PostInit(): 第二次初始化。主要做跨模块初始化工作。
-
Serve(): 在此实现模块的服务逻辑。进行消息和事件的处理,设置路由等。
-
Start(): 模块启动。此方法会被新开协程执行。
-
Stop(): 项目被关闭后执行的操作。注意:
defer wg.Done()
必不可少。
-
-
首先看几个比较重要的接口和类型的定义:
-
组件注册和启动的内部原理
-
模块的注册
语法知识点:
import _
语句会执行被引用包的init()
函数,并将包中的所有变量导出到当前包中。所以当模块在 main.go 中被导入以后,模块
init()
函数自动执行,完成 module 实例的创建并调用server.RegisterModule(instance)
方法。那么在RegisterModule()
里干了什么事情呢?如图:到此模块注册完成。
-
模块的启动
模块启动是通过
server.StartService()
函数进行的(server/server.go)。StartService() 函数首先遍历 Modules, 调用每个组件的 Init() 和 PostInit() 方法, 完成所有组件初始化。
接下来循环调用每个组件的 Serve() 方法,进行消息和事件处理的注册。
最后调用每个组件的 Start()。至此所有组件注册并启动完成。
-