toutGin: golang gin框架个人风格版 - Gitee

文章推薦指數: 80 %
投票人數:10人

package controller import ( "github.com/gin-gonic/gin" "toutGin/app/common" "toutGin/app/service" ) type UserController struct { data map[string]interface{} } ... 捐赠前请先登录 取消 前往登录 取消 支付完成 将跳转至支付宝完成支付 确定 取消 Watch 1 Star 1 Fork 1 尘坠/toutGin 加入Gitee 与超过600万开发者一起发现、参与优秀开源项目,私有仓库也完全免费:) 免费加入 已有帐号? 立即登录 返回 该仓库未指定开源许可证,未经作者的许可,此代码仅用于学习,不能用于其他用途。

项目仓库所选许可证以仓库主分支所使用许可证为准 master 克隆/下载 复制 下载ZIP 该操作需登录Gitee帐号,请先登录后再操作。

立即登录 没有帐号,去注册 文件 WebIDE 分支1 标签0 Tout 说明优化 41e28a4 17次提交 提交 取消 提示: 由于Git不支持空文件夾,创建文件夹后会生成空的.keep文件 app 保存 取消 .gitignore 保存 取消 README.md 保存 取消 go.mod 保存 取消 go.sum 保存 取消 main.go 保存 取消 Loading... README.md toutGin 个人风格的golang版RESTfulAPI项目结构,gin+gorm,简单易上手 结构清晰简单,代码洁癖患者的福音 项目结构 |-app |-common公共方法 |-display.go统一json格式输出 |-config配置文件和统一路由管理 |-message.yml状态码配置文件 |-route.go路由配置文件 |-controller控制器 |-dao负责curd的 |-middleware中间件 |-model模型 |-service核心业务处理 |-main.go程序执行入口 模块调用流程 controller->service->dao #controller严禁复杂业务,严禁直接调用dao,更严禁写sql语句 #要优雅,不要凌乱,乖~ RESTURL GEThttp://localhost:8080/v1/user POSThttp://localhost:8080/v1/user PUThttp://localhost:8080/v1/user DELETEhttp://localhost:8080/v1/user #api只接收Content-Type:application/json的传参,包括GET请求方式 JSONRESULT { "status":10000, "msg":"请求成功", "body":null } ROUTE示例 packageconfig import( "github.com/gin-gonic/gin" "toutGin/app/controller" "toutGin/app/middleware" ) typeRoutestruct{ Engine*gin.Engine } //路由路口 func(r*Route)Run(){ r.Engine.Use(new(middleware.RequestMiddleware).InitRequest) r.index() r.v1() } func(r*Route)index(){ r.Engine.Any("",new(controller.IndexController).Run) } func(r*Route)v1(){ v1:=r.Engine.Group("v1") { v1.Any("/user",new(controller.UserController).Run) } } CONTROLLER示例 packagecontroller import( "github.com/gin-gonic/gin" "toutGin/app/common" "toutGin/app/service" ) typeUserControllerstruct{ datamap[string]interface{} } //控制器入口 func(s*UserController)Run(c*gin.Context){ display=&common.Display{Context:c} data=common.GetData(c) deferdisplay.CatchPanic() switch{ casec.Request.Method=="POST": display.IsLogin(data) s.add() casec.Request.Method=="GET": ifdata["id"]!=nil{ s.info() }else{ s.list() } casec.Request.Method=="PUT": display.IsLogin(data) s.update() casec.Request.Method=="DELETE": display.IsLogin(data) s.delete() } } func(s*UserController)add(){ val:=map[int]string{ 20001:"name", 20002:"password", } display.IsEmpty(val,data) body:=make(map[string]uint) body["id"]=new(service.UserService).Add(data) display.Show(body) } func(s*UserController)list(){ val:=map[int]string{ 80007:"page", } display.IsEmpty(val,data) body:=new(service.UserService).GetList(data) display.Show(body) } func(s*UserController)info(){ display.HasKey(data) body:=new(service.UserService).GetInfo(common.MakeUint(data["id"])) display.Show(body) } func(s*UserController)update(){ display.HasKey(data) new(service.UserService).Update(data) display.Show(common.StatusOk) } func(s*UserController)delete(){ display.HasKey(data) new(service.UserService).Delete(common.MakeUint(data["id"])) display.Show(common.StatusOk) } SERVICE示例 packageservice import( "encoding/json" "toutGin/app/common" "toutGin/app/dao" "toutGin/app/model" ) typeUserServicestruct{ } func(s*UserService)Add(datamap[string]interface{})uint{ userDao:=new(dao.UserDao) params:=common.CopyParams([]string{"name","password"},data) json.Unmarshal(common.MakeJson(params),&userDao.User) returnuserDao.Add() } func(s*UserService)GetInfo(iduint)model.User{ userDao:=new(dao.UserDao) userDao.User.Id=id returnuserDao.GetOne() } func(s*UserService)Update(datamap[string]interface{}){ userDao:=new(dao.UserDao) params:=common.CopyParams([]string{"id","name","password"},data) userDao.Update(params) } func(s*UserService)Delete(iduint){ userDao:=new(dao.UserDao) userDao.User.Id=id userDao.Delete() } func(s*UserService)GetList(datamap[string]interface{})interface{}{ userDao:=new(dao.UserDao) returnuserDao.GetAll(data) } DAO示例 packagedao import( "toutGin/app/common" "toutGin/app/model" ) typeUserDaostruct{ Usermodel.User } func(d*UserDao)Add()uint{ table:=common.DB.Table("user") table.Create(&d.User) table.Last(&d.User) returnd.User.Id } func(d*UserDao)Update(datamap[string]interface{}){ common.DB.Table("user").Where("id=?",data["id"]).Updates(data) } func(d*UserDao)GetOne()model.User{ common.DB.Table("user").Where("id=?",d.User.Id).First(&d.User) returnd.User } func(d*UserDao)Delete(){ common.DB.Table("user").Delete(&d.User) } func(d*UserDao)GetAll(datamap[string]interface{})[]model.User{ varusers[]model.User limit:=20 common.DB.Table("user").Limit(limit).Offset(common.GetOffset(data["page"],limit)).Find(&users) returnusers } 接口统一返回 packagecommon import( "github.com/gin-gonic/gin" "net/http" ) const( StatusInit=0 StatusOk=10000 ) typeBodystruct{ Statusint`json:"status"` Msgstring`json:"msg"` Bodyinterface{}`json:"body"` } typeDisplaystruct{ Context*gin.Context BodyBody } //统一输出api数据 func(d*Display)Show(mixinterface{}){ message:=new(Message) ifd.Body.Status==StatusInit{ d.Body.Status=StatusOk } ifd.Body.Status!=StatusOk{ d.Body.Msg=message.GetMessage(d.Body.Status) d.Body.Body=nil }else{ ifval,ok:=mix.(int);ok{ d.Body.Status=val d.Body.Msg=message.GetMessage(d.Body.Status) d.Body.Body=nil }elseifval,ok:=mix.(string);ok{ d.Body.Status=11000 d.Body.Msg=val d.Body.Body=nil }else{ d.Body.Msg=message.GetMessage(d.Body.Status) d.Body.Body=mix } } d.Context.JSON(http.StatusOK,d.Body) d.Context.Abort() } 测试user表结构 CREATETABLE`user`( `id`int(11)NOTNULLAUTO_INCREMENT, `name`varchar(255)DEFAULTNULL, `password`varchar(255)DEFAULTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8; Starred 1 Star 1 Fork 1 捐赠 0人次 仓库评论 ( 0 ) 正在加载... 你可以在登录后,发表评论 举报成功 我们将于2个工作日内通过站内信反馈结果给你! 请认真填写举报原因,尽可能描述详细。

举报类型 请选择举报类型 举报原因 取消 发送 golanggin框架个人风格版 展开 收起 暂无标签 /netwelive/toutGin Go 保存更改 取消 暂无发行版 加载更多 不能加载更多了 简介内容 golanggin框架个人风格版 主页 取消 保存更改 Go 1 https://gitee.com/netwelive/toutGin.git [email protected]:netwelive/toutGin.git netwelive toutGin toutGin master 点此查找更多帮助 搜索帮助 Git命令在线学习 如何在Gitee导入GitHub仓库 Git仓库基础操作 企业版和社区版功能对比 SSH公钥设置 如何处理代码冲突 仓库体积过大,如何减小? 如何找回被删除的仓库数据 Gitee产品配额说明 GitHub仓库快速导入Gitee及同步更新 什么是Release(发行版) 将PHP项目自动发布到packagist.org 查看更多搜索结果 评论 仓库举报 回到顶部 该操作需登录Gitee帐号,请先登录后再操作。

立即登录 没有帐号,去注册



請為這篇文章評分?