RichCMS是一个使用Golang+mysql开发的通用内容管理系统,可以免费下载后,安装及部署使用。今天分析就项目的主程序 main.go做一些代码分析。
主程序位置:/Users/samsong/mygo/src/github.com/zituocn/richcms/src/cms/main.go
package main
import (
"github.com/zituocn/gow"
"github.com/zituocn/logx"
"github.com/zituocn/richcms/common/sdk/rees/filter"
"github.com/zituocn/richcms/src/cms/cache"
"github.com/zituocn/richcms/src/cms/conn"
"github.com/zituocn/richcms/src/cms/queue"
"github.com/zituocn/richcms/src/cms/router"
"github.com/zituocn/richcms/src/cms/suv"
)
func init() {
conn.InitLog()
conn.InitDB()
conn.InitLang()
if conn.IsFinishSetup() {
cache.InitCache()
filter.InitIPBox()
queue.InitCron()
conn.InitRedisDB()
}
}
func main() {
r := gow.Default()
r.SetAppConfig(gow.GetAppConfig())
router.Route(r)
suv.AddCustomFunc(r)
go func(r *gow.Engine) {
for {
s, _ := <-suv.Signal
if s {
if conn.IsFinishSetup() {
conn.InitLog()
cache.InitCache()
filter.InitIPBox()
queue.InitCron()
conn.InitRedisDB()
}
r.ResetRoute()
router.Route(r)
}
}
}(r)
err := r.Run()
if err != nil {
logx.Panic(err)
}
}
以上代码的一些说明:
- init 函数中,用来初始化一些内容,包括:日志,数据库,语言,内存缓存,防恶意爬虫、定时任务,Redis等。
- func main为主程序的开始,依次为:设置gow配置(从conf/app.conf中读取),设置路由,添加自定义函数。
- go func(r *gow.Engine) 部分,为监听是否重新初始化信息,并重置路由。
RichCMS使用的三方向Golang库:
- gow web 框架,项目地址:https://github.com/zituocn/gow
- logx 日志,项目地址:https://github.com/zituocn/logx
- ini 配置文件,项目地址:https://github.com/gkzy/gini
- mysql操作,gorm,项目地址: https://gorm.io