Skip to content

wangweimei/gomvc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简单的高性能 Golang MVC 框架

这个框架是我在用golang重构一个php项目时写的,因为被重构的项目不大,感觉用别的框架显得有点臃肿,所以干脆自己写一个。

这个框架之所以称之为高性能,一是因为结构简单,没有多余的东西,不臃肿;二是引用到的第三方包,都是精选同类型里面性能最高的那些。

主要功能

简单的路由调度

HTTP服务支持优雅退出、平滑重启

TLS支持绑定多个域名证书

支持HTTP BasicAuth

全局异常处理

支持MySQL、SQlite、Redis、Memcache

Redis消息队列处理

JSON配置文件

CLI方法封装

日志封装

控制器封装

数据模型封装

主要用到的第三方包

fasthttp(高性能HTTP服务,比原生快10倍)

jsoniter(高性能 JSON解析包,比原生快6倍)

hero(高性能模板引擎,支持模板预编译,所有模板引擎里面性能最高)

gorm(数据库ORM包,支持连接池、缓存预编译SQL语句,性能很好)

redigo(Redis客户端,支持连接池,高并发下性能很好)

使用说明

安装依赖

go mod init main
go get

运行

先复制config.bak.json配置文件,并改名成config.json,里面只保留需要的内容。

然后执行以下命令

go run .

可以访问 127.0.0.1:8888,如果启用TLS的话,端口是443

控制器

controller目录下面创建文件

package controller

type IndexController struct{}

var Index IndexController

func (t *IndexController) Default(ctx *fasthttp.RequestCtx) {
	//方法内容
}

路由

main.go文件中添加

routerFunc = map[string]func(ctx *fasthttp.RequestCtx){
	"/": controller.Index.Default,
}

模型

model目录下创建文件

package model

type SampleModel struct{}

var Sample SampleModel

func (t *SampleModel) GetList() (r string) {
  r = "Hello Go ~"
  return
}

调用模型方法

r := model.Sample.GetList()

全局可使用base.DB操作数据库,具体可以参考 GORM文档

视图

veiw目录下对应的控制器和方法下面创建文件,模板引擎使用方法可以参考 hero文档

HTTP服务优雅退出与平滑重启

优雅退出可以使用Ctrl+C或者执行以下命令

kill 进程号

平滑重启执行以下命令

kill -USR2 进程号

日志

全局可使用base.Log()方法记录日志,文件存放在log目录下面。

CLI操作

cli.go文件里面添加方法,然后在main.go文件添加CLI的路由

cliFunc = map[string]func(){
	"Test": Test,
}

通过以下命令执行

go run . cli 方法名

Redis 操作

全局可使用base.Redis操作连接池,简单读取字符串的话,可以使用base.RedisGet(key)

re := base.Redis.Get()//在连接池中取出一个链接
defer re.Close()//放回链接池
re.Do("SET", "key", "value", "EX", 3600)

Redis消息队列处理

可以使用以下方法推数据到队列,两个参数分别是队列名称和数据

base.PushQueue("test", "data")

创建队列相应的处理方法,在queue目录下创建文件

package queue

type TestQueue struct{}

var Test TestQueue

func (t *TestQueue) Exec(d string) {
	//方法内容
}

加载队列处理方法,在main.go文件中添加配置,队列名称和相应的处理方法

queueFunc = map[string]func(string){
	"test": queue.Test.Exec,
}

About

简单的高性能 Golang MVC 框架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages