您的位置:首页 > 编程语言 > Go语言

使用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

地址:https://github.com/gin-gonic/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

文档:https://jasperxu.github.io/gorm-zh/

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐