使用go, gin, gorm编写一个简单的curd的api接口
2019-03-17 17:48
816 查看
go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口
hello world
常规版
新建
demo1.go并输入以下代码,进入命令行,
go run demo1.go,就可以看到命令行输出
hello world
package main import "fmt" func main() { fmt.Println("hello word") }
网络版
使用
go标准库
http可以很容易建立一个 http 服务,保存以下代码为
demo2.go
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { _, _ = fmt.Fprintf(w, "%s hello world", r.Method) }) _ = http.ListenAndServe(":8080", nil) }
使用
go run命令,打开浏览器
http://127.0.0.1:8080/查看效果。
通过上面,发现 go 程序代码的结构为:包申明->导入包->函数。其中 main 包说明该程序是一个独立的程序,main 函数是入口函数。
gin
gin是一个基于
http库的轻量级 go 框架,只要几行代码就可以起一个 api 服务,使用前需要下载这个库,
demo
$ go get github.com/gin-gonic/gin使用 go get 来下载库
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() // 返回一个默认的gin实例 r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) _ = r.Run() // 默认在 0.0.0.0:8080 上监听并服务 }
保存上面代码在
api.go中,运行
go run api.go,浏览器或 postman 打开
http://127.0.0.1:8080/ping查看效果
gorm
gorm 是一个类似于 laravel 中的 Eloquent ORM,支持mysql,sqlite等多种数据库,使用前请下载
$ go get github.com/jinzhu/gorm $ go get github.com/mattn/go-sqlite3 //sqlite驱动
curd api
利用以上包,编写一个对用户资料实现增删改查的接口
新增用户接口
package main import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" "log" ) var db *gorm.DB var err error type User struct { ID uint `json:"id"` Name string `json:"name"` Email string `json:"email"` } func main() { db, err = gorm.Open("sqlite3", "./api.db") //使用mysql, gorm.Open(“mysql”, “user:pwd@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local”) if err != nil { log.Fatal("db connect error") } defer db.Close() //延时调用函数 db.AutoMigrate(&User{}) r := gin.Default() r.GET("/users", index) //获取所有用户 r.GET("/users/:id", show) //根据id获取用户 r.POST("/users", store) //保存新用户 r.PUT("/users/:id", update) //根据id更新用户 r.DELETE("/users/:id", destroy) //根据id删除用户 _ = r.Run() } func index(c *gin.Context) {} func show(c *gin.Context) {} func store(c *gin.Context) { var user User _ = c.BindJSON(&user) //绑定一个请求主体到一个类型 db.Create(&user) c.JSON(200, user) } func update(c *gin.Context) {} func destroy(c *gin.Context) {}
postman 测试效果
获取所有用户接口
func index(c *gin.Context) { var users []User db.Find(&users) c.JSON(200, users) }
postman 测试效果
获取指定id用户接口
func show(c *gin.Context) { id := c.Params.ByName("id") var user User db.First(&user, id) if user.ID == 0 { c.JSON(404, gin.H{"message": "user not found"}) return } c.JSON(200, user) }
postman 测试效果
更新和删除接口
func update(c *gin.Context) { id := c.Params.ByName("id") var user User db.First(&user, id) if user.ID == 0 { c.JSON(404, gin.H{"message": "user not found"}) return } else { _ = c.BindJSON(&user) db.Save(&user) c.JSON(200, user) } } func destroy(c *gin.Context) { id := c.Params.ByName("id") var user User db.First(&user, id) if user.ID == 0 { c.JSON(404, gin.H{"message": "user not found"}) return } else { _ = c.BindJSON(&user) db.Delete(&user) c.JSON(200, gin.H{"message": "delete success"}) } }
End
参考:https://medium.com/@cgrant/developing-a-simple-crud-api-with-go-gin-and-gorm-df87d98e6ed1
相关文章推荐
- 一个使用PJSUA-API编写的简单例子,演示了SIP注册,呼叫,语音交互(少于200行代码)【译】
- [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)
- 使用ATL编写一个简单的COM服务器
- 使用C++与SFML编写一个简单的撞球游戏Part5——对象管理
- 使用go channel实现一个简单的信号量
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 使用libevent和boost编写一个简单的tcp服务器
- [API]使用Blueprint来高雅的编写接口文档 前后端api文档,移动端api文档
- 使用阿里大于接口实现一个简单的短信验证(Java版)
- 使用C++与SFML编写一个简单的撞球游戏Part4——添加玩家弹板
- 一个使用Win32SDK编写Windows GUI程序的教程: "theForger's Win32 API Tutorial"
- 使用ATL编写一个简单的COM服务器
- 使用PHP开发一个简单的后台接口(响应移动端的get请求和post请求)
- 使用python编写一个登录接口
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
- 有一个帐号类,包含有(id、用户名和密码),编写程序使用List接口来存储多个帐号对象,注意id是自动生成(规则是为List中所有帐号中最大的id再加1)
- 利用 Debug API 编写一个简单的脱壳机
- 使用C++与SFML编写一个简单的撞球游戏Part8——添加AI弹板
- 使用C++与SFML编写一个简单的撞球游戏Part3——创建游戏启动界面
- 不使用API,创建一个最简单的窗口