博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用go, gin, gorm编写一个简单的curd的api接口
阅读量:5118 次
发布时间:2019-06-13

本文共 3420 字,大约阅读时间需要 11 分钟。

go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口

hello world

常规版

新建 demo1.go 并输入以下代码,进入命令行,go run demo1.go ,就可以看到命令行输出 hello world

package mainimport "fmt"func main() {    fmt.Println("hello word")}

网络版

使用 go 标准库 http 可以很容易建立一个 http 服务,保存以下代码为 demo2.go

package mainimport (    "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/ 查看效果。

20190414193122.png

通过上面,发现 go 程序代码的结构为:包申明->导入包->函数。其中 main 包说明该程序是一个独立的程序,main 函数是入口函数。

gin

地址:

gin 是一个基于 http 库的轻量级 go 框架,只要几行代码就可以起一个 api 服务,使用前需要下载这个库,

demo

$ go get github.com/gin-gonic/gin 使用 go get 来下载库

package mainimport "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 查看效果

20190414172934.png

gorm

文档:

gorm 是一个类似于 laravel 中的 Eloquent ORM,支持mysql,sqlite等多种数据库,使用前请下载

$ go get github.com/jinzhu/gorm $ go get github.com/mattn/go-sqlite3 //sqlite驱动

curd api

利用以上包,编写一个对用户资料实现增删改查的接口

新增用户接口

package mainimport (    "github.com/gin-gonic/gin"    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/sqlite"    "log")var db *gorm.DBvar err errortype 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 测试效果

20190414191959.png

获取所有用户接口

func index(c *gin.Context) {    var users []User    db.Find(&users)    c.JSON(200, users)}

postman 测试效果

20190414192131.png

获取指定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 测试效果

20190414192355.png

更新和删除接口

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://www.cnblogs.com/luke44/p/developing-rest-api-with-go-and-gin.html

你可能感兴趣的文章
HTML元素定义 ID,Class,Style的优先级
查看>>
【实数二分/前缀和维护】Best Cow Fences
查看>>
构造者模式
查看>>
[转][C#]Combobox 行高
查看>>
什么是IDS/IPS?
查看>>
JavaScript:学习笔记(3)——正则表达式的应用
查看>>
LeetCode:旋转链表【61】
查看>>
浮点数转化为字符串
查看>>
ssRs父子维度
查看>>
关押罪犯
查看>>
像房源上下架链路比较长的需求怎么测试?测试的重点和难点?
查看>>
http和https的区别
查看>>
接口自动化之数据依赖
查看>>
jmeter(1)添加header和cookie
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
Linux命令应用大词典-第4章 目录和文件操作
查看>>
A + B Problem II
查看>>
app与服务端通信时如何进行消息校验
查看>>