gin+gorm+router 快速搭建crud restful API 接口| Go 技术论坛

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

根据上一篇"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编写文章,未使用代码高亮 内容结构混乱:逻辑不清晰,内容混乱,难以阅读 标题随意:标题党、标题不释义 尊重版权:分享付费课程、破解软件(付费),侵犯作者劳动成果 其他理由:请补充说明 举报 取消



請為這篇文章評分?