A Web develop project skeleton base on Gin which just for reference.
More efficiency,
Faster and clear,
Easier to deploy
Suitable for simple project. ko、kit、go-micro、kite are better choice for the middle and large project.
Via moroingo installer or use docker
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
cd web
make deps
make test
make restart
make
visit by browser: http://localhost:4000/api/index
First build the executable file
make build # for linus
make cross # for mac/windows
Then put files of the build in your server and set the path of log and static file(html/css/js),and run the executable file.If 80 port is not allowed to use,consider the nginx proxy,or use the gin middleware gin-reverseproxy instead, which has some example in routers.go. When the project start running, it will generate the pidfile in the root path of the project. Excute the following command to update your project.
kill -INT $(cat pid) && ./morningo # graceful stop the process and restart
.
├── Makefile
├── README.md
├── command
│ └── sword.go
├── config global config
│ └── env.go
├── connections store connection
│ ├── database
│ │ ├── mongodb
│ │ └── mysql
│ └── redis
│ └── redis.go
├── controllers controller
│ └── MainController.go
├── filters middleware
│ ├── auth auth middleware
│ │ ├── drivers auth engine
│ │ └── auth.go
│ └── filter.go middleware initer
├── frontend frontend resource
│ ├── assets
│ │ ├── css
│ │ ├── images
│ │ └── js
│ ├── dist
│ └── templates
│ └── index.tpl
├── handle.go global error handler
├── main.go
├── models model
│ └── User.go
├── module module of project
│ │── schedule
│ │ └── schedule.go
│ │── logger
│ │ └── logger.go
│ └── server
│ └── server.go
├── routers routers
│ └── api_routers.go
├── routers.go router initer
├── routers_test.go unit test for api
├── storage
│ ├── cache cache file
│ └── logs log file
│ ├── access.log
│ └── error.log
└── vendor govendor vendor
HTTP (based on Gin)
- Router
- Middleware
- Controller
- Request
- Response
- View
- Session
- Go template
- Authentication
- Authorization
- Encryption
- Hash
- Dancer Command
- Cache System
- Error and Log
- Schedule
- Mysql
- Mongodb
- Redis
ORM(based on gorm)
- Api test
- web framework: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
- schedule:github.com/robfig/cron
wrk -c100 -d30s -t4 http://localhost:4000/api/index
Running 30s test @ http://localhost:4000/api/index
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.03ms 4.17ms 72.72ms 89.95%
Req/Sec 7.40k 1.67k 11.20k 67.75%
884816 requests in 30.03s, 107.17MB read
Non-2xx or 3xx responses: 884816
Requests/sec: 29462.96
Transfer/sec: 3.57MB
- Logger
- Test
- Cache/Session
- Queue of task
- Read & Write Connections
- Redis cluster
- Profiling(Laravel/Swoole;beego)
- Command tool
- Interaction command env
- Fast CRUD Generator
- Add Reverse Proxy
- Fixed the path
- Add session/cache and Auth middleware
- Add test
- Add graceful restart
- Add schedule module
- Add installer of project
- Add access.log and error.log
- Add database transcation