通用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文件
经验分享 程序员 微信小程序 职场和发展