gin+gorm+router 快速搭建crud restful API 接口| Go 技术论坛
文章推薦指數: 80 %
根据上一篇"gorm基础"封装crud api接口下载扩展go get github.com/go-sql-driver/mysql go get github.com/jinzhu/gorm go get github.com/gin-gonic/gin 建表 ...
微信登录
gin+gorm+router快速搭建crudrestfulAPI接口
Go
/
12230
/
11
/
发布于3年前
根据上一篇"gorm基础"封装crudapi接口
下载扩展
gogetgithub.com/go-sql-driver/mysql
gogetgithub.com/jinzhu/gorm
gogetgithub.com/gin-gonic/gin
建表语句
CREATETABLE`users`(
`id`bigint(20)NOTNULLAUTO_INCREMENT,
`username`varchar(255)CHARACTERSETlatin1DEFAULTNULL,
`password`varchar(255)CHARACTERSETlatin1DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=MyISAMAUTO_INCREMENT=2DEFAULTCHARSET=utf8mb4;
结构
├──api
│├──apis
││└──user.go
│├──database
││└──mysql.go
│├──models
││└──user.go
│└──router
│└──router.go
└──main.go
apis/apis/user.go
packageapis
import(
"github.com/gin-gonic/gin"
model"api/models"
"net/http"
"strconv"
)
//列表数据
funcUsers(c*gin.Context){
varusermodel.User
user.Username=c.Request.FormValue("username")
user.Password=c.Request.FormValue("password")
result,err:=user.Users()
iferr!=nil{
c.JSON(http.StatusOK,gin.H{
"code":-1,
"message":"抱歉未找到相关信息",
})
return
}
c.JSON(http.StatusOK,gin.H{
"code":1,
"data":result,
})
}
//添加数据
funcStore(c*gin.Context){
varusermodel.User
user.Username=c.Request.FormValue("username")
user.Password=c.Request.FormValue("password")
id,err:=user.Insert()
iferr!=nil{
c.JSON(http.StatusOK,gin.H{
"code":-1,
"message":"添加失败",
})
return
}
c.JSON(http.StatusOK,gin.H{
"code":1,
"message":"添加成功",
"data":id,
})
}
//修改数据
funcUpdate(c*gin.Context){
varusermodel.User
id,err:=strconv.ParseInt(c.Param("id"),10,64)
user.Password=c.Request.FormValue("password")
result,err:=user.Update(id)
iferr!=nil||result.ID==0{
c.JSON(http.StatusOK,gin.H{
"code":-1,
"message":"修改失败",
})
return
}
c.JSON(http.StatusOK,gin.H{
"code":1,
"message":"修改成功",
})
}
//删除数据
funcDestroy(c*gin.Context){
varusermodel.User
id,err:=strconv.ParseInt(c.Param("id"),10,64)
result,err:=user.Destroy(id)
iferr!=nil||result.ID==0{
c.JSON(http.StatusOK,gin.H{
"code":-1,
"message":"删除失败",
})
return
}
c.JSON(http.StatusOK,gin.H{
"code":1,
"message":"删除成功",
})
}
database/mysql.go
packagedatabase
import(
_"github.com/go-sql-driver/mysql"//加载mysql
"github.com/jinzhu/gorm"
"fmt"
)
varEloquent*gorm.DB
funcinit(){
varerrerror
Eloquent,err=gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local&timeout=10ms")
iferr!=nil{
fmt.Printf("mysqlconnecterror%v",err)
}
ifEloquent.Error!=nil{
fmt.Printf("databaseerror%v",Eloquent.Error)
}
}
models/user.go
packagemodels
import(
orm"api/database"
)
typeUserstruct{
IDint64`json:"id"`//列名为`id`
Usernamestring`json:"username"`//列名为`username`
Passwordstring`json:"password"`//列名为`password`
}
varUsers[]User
//添加
func(userUser)Insert()(idint64,errerror){
//添加数据
result:=orm.Eloquent.Create(&user)
id=user.ID
ifresult.Error!=nil{
err=result.Error
return
}
return
}
//列表
func(user*User)Users()(users[]User,errerror){
iferr=orm.Eloquent.Find(&users).Error;err!=nil{
return
}
return
}
//修改
func(user*User)Update(idint64)(updateUserUser,errerror){
iferr=orm.Eloquent.Select([]string{"id","username"}).First(&updateUser,id).Error;err!=nil{
return
}
//参数1:是要修改的数据
//参数2:是修改的数据
iferr=orm.Eloquent.Model(&updateUser).Updates(&user).Error;err!=nil{
return
}
return
}
//删除数据
func(user*User)Destroy(idint64)(ResultUser,errerror){
iferr=orm.Eloquent.Select([]string{"id"}).First(&user,id).Error;err!=nil{
return
}
iferr=orm.Eloquent.Delete(&user).Error;err!=nil{
return
}
Result=*user
return
}
router/router.go
packagerouter
import(
"github.com/gin-gonic/gin"
."api/apis"
)
funcInitRouter()*gin.Engine{
router:=gin.Default()
router.GET("/users",Users)
router.POST("/user",Store)
router.PUT("/user/:id",Update)
router.DELETE("/user/:id",Destroy)
returnrouter
}
main.go
packagemain
import(
_"api/database"
"api/router"
orm"api/database"
)
funcmain(){
deferorm.Eloquent.Close()
router:=router.InitRouter()
router.Run(":8000")
}
执行gorunmain.go
访问地址
POSTlocalhost:8006/user添加
GETlocalhost:8006/users列表
DELETElocalhost:8006/user/id删除
PUTlocalhost:8006/user/id修改
本作品采用《CC协议》,转载必须注明作者和本文链接
举报
yourself
183声望
招聘@你猜
暂无个人描述~
18人点赞
推荐文章:
更多推荐...
博客
重大翻车现场,记一次线上事故
16
/
2
|
9个月前
博客
go-admin基于Gin+Vue+ElementUI的前后端分离权限管理系统
56
/
12
|
1年前
博客
GRPC服务调用实践(一)
11
/
6
|
2年前
分享
用Gin写了一个在线工具站。
。
。
13
/
4
|
2年前
翻译
教程:使用go的gin和gorm框架来构建RESTfulAPI微服务
39
/
6
|
2年前
讨论数量:11
yourself
183声望
/招聘@你猜
@Panda:facepunch:
3年前
评论
评论
LornBach
0声望
Mark一下,PHPer转Go中……
3年前
评论
评论
skyLee
见习助教
59声望
/研发@XT
@George为何转呀?业务需求?个人学习?
3年前
评论
评论
LornBach
0声望
@skyLee业务需求,PHP很难满足
3年前
评论
评论
skyLee
见习助教
59声望
/研发@XT
@George目前我也在学这块,暂时还没遇到使用场景,求指教
3年前
评论
评论
LornBach
0声望
@skyLeehttps://www.consul.io看一下他们的产品
3年前
评论
评论
LornBach
0声望
@GeorgeConsul类似于ZooKeeper,用于服务治理和配置管理,基于Go语言实现,比ZooKeeper更轻量
3年前
评论
评论
侧面
课程读者
10声望
@George_fL为什么不考虑java
2年前
评论
评论
GeorgeKing
L5.7译者
430声望
@侧面想学Java但是还是Go上手比较快
2年前
评论
评论
zacksleo
7声望
👍🏻
目前的做法,先用https://github.com/Shelnutt2/db2struct,从数据库批量生成models,然后使用https://github.com/cweagans/apig/tree/dep-...,通过model生成CRUD及docs
2年前
评论
评论
时俊
课程读者
29声望
增加下列表的分页的功能更好
9个月前
评论
评论
讨论应以学习和精进为目的。
请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
支持MD
帮助
关注本文
评论
提交
忘记密码?
or
注册
第三方账号登录
微信登录
GitHub登录
匿名举报,为防止滥用,仅管理员可见举报者。
我要举报该,理由是:
垃圾广告:恶意灌水、广告、推广等内容
无意义内容:测试、灌水、文不对题、消极内容、文章品质太差等
违规内容:色情、暴利、血腥、敏感信息等
不友善内容:人身攻击、挑衅辱骂、恶意行为
科学上网:翻墙、VPN、Shadowsocks,政策风险,会被关站!
不懂提问:提问太随意,需要再做一遍《提问的智慧》测验
随意提问:提问没有发布在社区问答分类下
排版混乱:没有合理使用Markdown编写文章,未使用代码高亮
内容结构混乱:逻辑不清晰,内容混乱,难以阅读
标题随意:标题党、标题不释义
尊重版权:分享付费课程、破解软件(付费),侵犯作者劳动成果
其他理由:请补充说明
举报
取消
延伸文章資訊
- 1Golang Gin Router HandlerFunc 拆分練習 - 菜鳥工程師肉豬
Go Gin 把Router處理請求的 HandlerFunc 拆分為另外的檔案。 ... DemoRoute 角色類似Java Spring Boot的Controller,用來設定API路徑...
- 2gin+gorm+router 快速搭建crud restful API 接口| Go 技术论坛
根据上一篇"gorm基础"封装crud api接口下载扩展go get github.com/go-sql-driver/mysql go get github.com/jinzhu/gorm ...
- 3gin controller 自动注册 - 简书
反射入门可以先看这个http://colobu.com/2015/09/23/laws-of-goang-reflection/ 因为在使用gin框架,在配置路由的时候需要手...
- 4使用gin封装一个web脚手架(一):控制器和路由 - 掘金
创建一个go项目,名称为myGin go.mod文件为安装gin 创建一个main.go文件创建routes文件夹和controller 项目结构为在controller下创建一个Index控制.
- 5sqrtcat/easy-gin: 一套基于Gin 框架的MVC 脚手架 - GitHub
Contribute to sqrtcat/easy-gin development by creating an account on GitHub. ... index.html - ind...