通用api快速开发框架示例(golang)
通用api快速开发框架示例(golang)
1.上个月go进入tiobe前,学go的朋友,庆贺吧,还没学的朋友,来不 2.工作了4-5个月,抽取了一下工作中用的代码,中间换过框架,最终封装了这些常用api开发func
框架主要构成:gin + gorm + mysql( + casbin) 项目地址:
通用原理:
1.封装 2.golang reflect interface{}
特点:
1.返回json数据 2.一张表的增删改查以及分页 3.增加多张表连接操作(…waiting for being beeter) 4.增加网站基本信息接口 5.select * 的优化(反射替换*为具体字段名) 6.优化自定义gorm日志(存储错误sql以及相关error) 7.增加权限(用户-组(角色)-权限(菜单)) 8.增加参数验证
使用示例
-
新增
/*user model*/ type User struct { ID uint `json:"id" gorm:"primary_key"` Name string `json:"name"` Createtime deercoder.JsonTime `json:"createtime"` //maybe you like util.JsonDate }
// create user func (c *User)Create(args map[string][]string) interface{ } { args["createtime"] = append(args["createtime"], time.Now().Format("2006-01-02 15:04:05")) return deercoder.CreateData("user", args) }
-
修改
// update user func (c *User)Update(args map[string][]string) interface{ } { return deercoder.UpdateData("user", args) }
-
删除
// delete user, by id func (c *User)DeleteByid(id string) interface{ } { return deercoder.DeleteDataByName("user", "id", id) }
-
分页,搜索二合一
// get user, limit and search // clientPage 1, everyPage 10 default func (c *User)GetBySearch(args map[string][]string) interface{ } { //相当于注册类型,https://github.com/jinzhu/gorm/issues/857 //db.DB.AutoMigrate(&User{}) //var users = []*User{} var users []*User return deercoder.GetDataBySearch(User{ }, &users, "user", args) //匿名User{} }
-
返回json
{ "status":200, "msg":"请求成功", "data":[ { "id":8, "name":"梦", "createtime":"2018-08-08 00:00:00" }, { "id":7, "name":"梦", "createtime":"2018-08-08 00:00:00" } ], "pager":{ "clientpage":1, "sumpage":6, "everypage":2 } }
-
根据id获得信息
// get user, by id func (c *User)GetById(id string) interface{ } { deercoder.DB.AutoMigrate(&User{ }) var user = User{ } return deercoder.GetDataById(&user, id) }
-
表连接,分页搜索二合一
// user detail info // include table `user` and `userinfo` data // maybe you need to build detail info like model UserinfoBK func GetUserinfoBySearch(args map[string][]string) interface{ } { //inner join var userdetail []UserinfoDe return db.GetDoubleTableDataBySearch(UserinfoDe{ }, &userdetail, "userinfo", "user", args) }
-
文件处理、表单验证、logger 等常用工具,详情见或*_test.go文件