【阅读 GinSkeleton】技巧

200 阅读2分钟

奇怪的技巧合集

技巧一:导了包,就有了值。

img

每个被导入的包在导入之后的流程

  • 会先将包的可导出函数(大写字母开头)、包变量、包常量等声明并初始化完成,
  • 然后如果这个包中定义了init()函数,则自动调用init()函数。init()函数调用完成后,才回到导入者所在的包。
  • 这个导入者所在包也一样的处理逻辑,声明并初始化包变量、包常量等,再调用init()函数(如果有的话),依次类推,直到回到main包,
  • main包也将初始化包常量、包变量、函数,然后调用init()函数,调用完init()后,调用main函数,于是开始进入主程序的执行逻辑。

所以当你遇到一些需要初始化的函数时候,就可以直接在包中写init函数,在某个地方导入包,就完成了初始化。精简了代码,也方便使用。

例子:

//bootstrap/init.go
func init() {
	// 1. 初始化 项目根路径,参见 variable 常量包,相关路径:app\global\variable\variable.go
	//2.检查配置文件以及日志目录等非编译性的必要条件
	//3.初始化表单参数验证器,注册在容器(Web、Api共用容器)
	// 4.启动针对配置文件(confgi.yml、gorm_v2.yml)变化的监听, 配置文件操作指针,初始化为全局变量
	// config>gorm_v2.yml 启动文件变化监听事件
	// 5.初始化全局日志句柄,并载入日志钩子处理函数
	// 6.根据配置初始化 gorm mysql 全局 *gorm.Db
	// 根据配置初始化 gorm sqlserver 全局 *gorm.Db
	// 根据配置初始化 gorm postgresql 全局 *gorm.Db
	// 7.雪花算法全局变量
	// 8.websocket Hub中心启动
	// 9.casbin 依据配置文件设置参数(IsInit=1)初始化
}
//cmd/web/main.go
package main

import (
	"goskeleton/app/global/variable"
	_ "goskeleton/bootstrap"
	"goskeleton/routers"
)

// 这里可以存放后端路由(例如后台管理系统)
func main() {

}