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