工具简介

elego简介

这是一个基于restgo+element-admin的项目包
地址https://github.com/techidea8/elego.git

restgo简介

一个轻量的golang开发框架
restgo 框架 地址https://github.com/techidea8/restgo.git

restctl

一个根据表结构生成代码的工具,可以自定义模板
地址https://github.com/techidea8/restctl.git

使用方法

下载elego项目

    git clone https://github.com/techidea8/elego.git
  • 后端项目结构描述(server)
├─args  --存放请求参数
├─config --存放全局配置文件
├─ctrl --存放全部控制器
├─global --存放全局变量
├─initialize --初始化需要配置的一些功能
├─logs  --存放日志文件
├─model --存放数据库模型文件
├─resource --存放静态资源文件,支持embedFs,需要go1.16支持
│  ├─console
│  ├─www
│  └─wxh5
├─service --存放service
└─utils --常用工具类
  • 前端项目(console)
    前端项目基于element-ui-admin,具体可以参考
生成代码

安装restctl

go get github.com/techidea8/restctl

安装完成后可以使用restctl指令测试是否已经成功安装

>restctl 
Usage of restctl.exe:
  -c string
        config file path (default "./restgo.yaml")
  -dns string
        dns link to mysql (default "root:root@(127.0.0.1:3306)/test")
  -l string
        code language,eg:go || java || php  (default "go")
  -m string
        out model
  -pkg string
        application package (default "turinapp")
  -t string
        table name (default "test")
  -tpldir string
        templete for code  (default "./tmpl-go")
  -v    show restctl version

配置restgo.yaml

在elego项目下配置restgo.yml文件

#数据库连接串,目前只支持mysql
dns: root:root@(127.0.0.1:3306)/turing_test?charset=utf8mb4&loc=Local
#后端代码语言:go|java
lang: go
#对应表名称
table: test
#生成模型文件
model: test
#对应项目package
package: turingapp
#代码模板
tpldir: ./tmpl-go

生成代码

turing_testbiz_activity
CREATE TABLE `biz_activity` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) DEFAULT NULL COMMENT '活动名称',
  `pic` varchar(255) DEFAULT NULL COMMENT '图标',
  `start_at` datetime DEFAULT NULL COMMENT '开始时间',
  `end_at` varchar(255) DEFAULT NULL COMMENT '结束时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';

然后

restctl -m activity -t biz_activity

系统将自动生成如下文件

├─console
│  └─src
│      ├─api
│      │      activity.js
│      │
│      └─views
│          └─activity
│                  list.vue
│
├─server
│  └─server
│      ├─args
│      │      activity.go
│      │
│      ├─ctrl
│      │      activity.go
│      │
│      ├─model
│      │      activity.go
│      │
│      └─service
│              activity.go


调整

配置文件

server\app.yml
# redis configuration
redis:
  db: 0
  addr: 'redis://127.0.0.1:6379'
  password: 'root'
  max-idle: 10
  idle-timeout-sec: 30
# mysql connect configuration
database:
  db-type: 'mysql'   #sqlite3/mysql
  db-name:  "test"
  addr: '127.0.0.1:3306'
  query: 'charset=utf8mb4&parseTime=True&loc=Local'
  username: '[username]'
  password: '[password]'
  max-idle-conns: 1
  max-open-conns: 10
  log-mode: 4  # 4 -info  1- 安静  2 :Error 3 警告
  table-prefix: 'turing_'

路由配置

server\initialize\router.go
//注册控制器
func InitRouter() {
	restgo.EnableCors()
	new(ctrl.AuthCtrl).Router()
	new(ctrl.OpenCtrl).Router()
	new(ctrl.CaptchaCtrl).Router()
	new(ctrl.AttachCtrl).Router()
	new(ctrl.UserCtrl).Router()
	new(ctrl.AreaCtrl).Router()
	new(ctrl.WeixinCtrl).Router()
	new(ctrl.WxmpApiCtrl).Router()
    //添加activity控制器
	new(ctrl.ActivityCtrl).Router()
	global.Log.Debug("[√]完成控制器解析 ")
}

如果需要修改查询条件

service/args/activity.go
//分页
func (p *Activity) Condtions() func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		if !p.Datefrom.IsZero() {
			db = db.Where("create_at  >= ?", p.Datefrom.String())
		}
		if !p.Dateto.IsZero() {
			db = db.Where("create_at  < ?", p.Dateto.String())
		}
        //这里修改查询条件

		return db
	}
}
//结束

定制自己的模板

修改现有模板

tmp-go下存放了项目模板

    api.js.html   -- 生成console/src/api/xx.js的模板
    args.go.html  -- 生成server/arg/xx.go的模板
    ctrl.go.html  -- 生成server/ctrl/xx.go的模板
    list.vue.html -- 生成console/src/views/xx/list.vue的模板
    model.go.html -- 生成server/model/xx.go的模板
    service.go.html ---- 生成server/service/xx.go的模板

修改模板生成路径

api.js.html"console/src/api/[model].js.tpl"console/src/api/[model].js[model]-m-m test{{define "console/src/api/[model].js.tpl"}}

diy自有模板

  • 新建模板tpldiy
  • 复制tmp-go下模板文件到tpldiy下
  • 修改模板
  • 修改配置文件restgo.yaml 中 tpldir
tpldir: ./tpldiy
  • 通过restctl -m xx -t yy 生成代码

diy项目

可以用自有项目替换server 和console