toutGin: golang gin框架个人风格版 - Gitee
文章推薦指數: 80 %
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帐号,请先登录后再操作。
立即登录
没有帐号,去注册
延伸文章資訊
- 1Golang Gin Router HandlerFunc 拆分練習 - 菜鳥工程師肉豬
Go Gin 把Router處理請求的 HandlerFunc 拆分為另外的檔案。 ... DemoRoute 角色類似Java Spring Boot的Controller,用來設定API路徑...
- 2sqrtcat/easy-gin: 一套基于Gin 框架的MVC 脚手架 - GitHub
Contribute to sqrtcat/easy-gin development by creating an account on GitHub. ... index.html - ind...
- 3toutGin: golang gin框架个人风格版 - Gitee
package controller import ( "github.com/gin-gonic/gin" "toutGin/app/common" "toutGin/app/service"...
- 4使用gin封装一个web脚手架(一):控制器和路由 - 掘金
创建一个go项目,名称为myGin go.mod文件为安装gin 创建一个main.go文件创建routes文件夹和controller 项目结构为在controller下创建一个Index控制.
- 5一起幫忙解決難題,拯救IT 人的一天
Day24 Gin with Cache ... 而我們這章節主要也是在講Gin在Server Cache的實作! ... "github.com/gin-gonic/gin" "ironman...