为什么又要推荐一个新的web框架

很难找到一款开发效率高易上手能够广泛推广性能好(节省成本抗住大并发C10k), 部署简单(一键部署,无需配置任何环境)的Http项目开发框架。如果有,那么一定是用Go语言开发的吧!看到很多php的仁兄还没接触Go语言。想起以往用php框架像laravel开发,php-fpm部署运行,并发起来疯狂加机器的日子,眼泪就流下来。尽管后来有了swoole这种优秀的解决方案。Go的天生底层网络处理优势还是独树一帜(请忘了它的语法)。于是,我向即将或已经遭受并发之苦,成本之痛,部署之心累的底层码农们推荐一门神奇的语言Go,以及一个优秀的Web开发框架Gin。Beego?听过很多吐槽,不敢轻易用。由于Gin很”简单”,根据一些个人的开发习惯,整理了一个基于Gin新手入门项目开发骨架,欢迎下载一波感受一下。以下正文:

地址:https://github.com/chenhg5/morningo

MorningGo : Gin WebApp Project Skeleton

基于Gin的web项目开发框架。仅供参考。

更高的开发效率,
更好的性能,
更简单整洁的项目组织结构,
更快的部署。

适合于小型项目,大中型项目(pv高、需求复杂度高)移步 kitgo-microkite

环境要求

项目安装运行

使用安装器安装

安装项目

1
2
3
4
5
6
7
8
cd $GOPATH/src

wget https://gitee.com/cg33/morningo-installer/raw/master/morningo-installer # mac
wget https://gitee.com/cg33/morningo-installer/raw/master/morningo-installer-linus # linus
wget https://gitee.com/cg33/morningo-installer/raw/master/morningo-installer.exe # windows

chmod +x morningo-installer
./morningo-installer --project-name web

加载依赖

1
2
cd web
make deps

测试

1
make test

平滑重启

1
make restart

运行

1
make

浏览器访问 http://localhost:4000/api/index

项目部署

生成可执行文件

1
2
make build # linus用户
make cross # mac/windows用户

关于代理的使用,```routers.go```中有示例。运行的同时会在文件夹下生成```pid```文件,每次更新完文件后执行如下命令即可平滑热更。
1
2
```
kill -INT $(cat pid) && ./morningo # 即停止旧的进程,重启新的执行文件

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

.
├── Makefile
├── README.md
├── command
│   └── sword.go
├── config 全局配置
│   └── env.go
├── connections 存储连接
│   ├── database
│   │   ├── mongodb
│   │   └── mysql
│   └── redis
│   └── redis.go
├── controllers 控制器
│   └── MainController.go
├── filters 中间件
│   └── auth 认证中间件
│      ├── drivers 认证引擎
│   └── auth.go
├── frontend 前端资源
│   ├── assets
│   │   ├── css
│   │   ├── images
│   │   └── js
│   ├── dist
│   └── templates
│   └── index.tpl
├── handle.go 全局错误处理
├── main.go
├── models 模型
│   └── User.go
├── module 项目模块
│   └── schedule
│   └── schedule.go 定时任务模块
├── routers.go 路由
├── routers_test.go api测试
├── storage
│   ├── cache 缓存文件
│   └── logs 项目日志
│   ├── access.log
│   └── error.log
└── vendor govendor 第三方包

箱子里有什么 what`s in the box

HTTP 层(基于Gin)

  • 路由
  • 中间件
  • 控制器
  • 请求
  • 响应
  • 视图
  • Session

前端

  • tpl模板

安全

  • 用户认证
  • 用户授权
  • 加密解密
  • 哈希

综合话题

  • dancer 命令行
  • 缓存系统
  • 错误与日志
  • 任务调度

数据库

  • mysql
  • mongodb
  • redis

ORM(基于gorm)

测试

  • api 测试

项目依赖

  • web框架:github.com/gin-gonic/gin
  • ORM包:github.com/jinzhu/gorm
  • Redis:github.com/go-redis/redis
  • Mysql:github.com/go-sql-driver/mysql
  • Wechat:github.com/silenceper/wechat
  • 任务调度:github.com/robfig/cron