博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (三)
阅读量:6824 次
发布时间:2019-06-26

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

img_d292f5a02241aa38b286d825c61bb740.png
gin-gonic

  这是系列文章的第三篇。下面是另外两篇的链接:

  
  

修改数据结构

  基本的 API 已经定义好了,现在是个修改 Person 对象结构的好时机。只要修改 Person 结构体,数据库和 API 都会自动做出相应的修改。

  我要做的是在 Person 结构体中添加 city 字段,就这一行,没有其他改动。

type Person struct {        ID        uint   `json:"id"`        FirstName string `json:"firstname"`        LastName  string `json:"lastname"`        City      string `json:"city"`}

  刷新浏览器,你就会看到 city 字段已经添加进去了。

[{"id": 2,"firstname": "Elvis","lastname": "Presley","city": ""},{"id": 3,"firstname": "Tom","lastname": "Sawyer","city": ""}]

  Gin 可以创建和修改字段,而不需要做其他任何改动。

$ curl -i -X PUT http://localhost:8080/people/2 -d '{ "city": "Memphis" }'HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8Date: Sat, 03 Dec 2016 00:40:57 GMTContent-Length: 67{"id":2,"firstname":"Elvis","lastname":"Presley","city":"Memphis"}

  这都是靠 main 函数这行代码中的这行代码来处理的:db.AutoMigrate(&Person{})。在生产环境中,我们肯定要做其他更为精细的处理,不过作为原型验证,这已经足够了。

使用 MySQL

  我知道你在想什么,Gin 确实很棒,但为什么不用 MySQL 替换 SQLite 呢。

  只需要替换一下 import 声明和数据库连接就行了。

  import 声明代码:

import _ “github.com/go-sql-driver/mysql”

  数据库连接代码:

db, _ = gorm.Open("mysql", "user:pass@tcp(127.0.0.1:3306)/database?charset=utf8&parseTime=True&loc=Local")

  完整代码:

package mainimport (    "fmt"    "github.com/gin-gonic/gin"    _ "github.com/go-sql-driver/mysql"    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/sqlite")var db *gorm.DBvar err errortype Person struct {    ID        uint   `json:"id"`    FirstName string `json:"firstname"`    LastName  string `json:"lastname"`    City      string `json:"city"`}func main() {    // NOTE: See we're using = to assign the global var    // instead of := which would assign it only in this function    // db, err = gorm.Open("sqlite3", "./gorm.db")    db, _ = gorm.Open("mysql", "user:pass@tcp(127.0.0.1:3306)/database?charset=utf8&parseTime=True&loc=Local")    if err != nil {        fmt.Println(err)    }    defer db.Close()    db.AutoMigrate(&Person{})    r := gin.Default()    r.GET("g/", GetProjects)    r.GET("/people/:id", GetPerson)    r.POST("/people", CreatePerson)    r.PUT("/people/:id", UpdatePerson)    r.DELETE("/people/:id", DeletePerson)    r.Run("g:8080")}func GetProjects(c *gin.Context) {    var people []Person    if err := db.Find(&people).Error; err != nil {        c.AbortWithStatus(404)        fmt.Println(err)    } else {        c.JSON(200, people)    }}func GetPerson(c *gin.Context) {    id := c.Params.ByName("id")    var person Person    if err := db.Where("id = ?", id).First(&person).Error; err != nil {        c.AbortWithStatus(404)        fmt.Println(err)    } else {        c.JSON(200, person)    }}func CreatePerson(c *gin.Context) {    var person Person    c.BindJSON(&person)    db.Create(&person)    c.JSON(200, person)}func UpdatePerson(c *gin.Context) {    var person Person    id := c.Params.ByName("id")    if err := db.Where("id = ?", id).First(&person).Error; err != nil {        c.AbortWithStatus(404)        fmt.Println(err)    }    c.BindJSON(&person)    db.Save(&person)    c.JSON(200, person)}func DeletePerson(c *gin.Context) {    id := c.Params.ByName("id")    var person Person    d := db.Where("id = ?", id).Delete(&person)    fmt.Println(d)    c.JSON(200, gin.H{"id #" + id: "deleted"})}

总结

  Go 是一种既灵活又健壮的语言,它能简单又快捷的搭建出功能丰富的应用,而且还不需要很大的代码量。希望这篇文章能对你有点用处,欢迎在留言区写下你的想法和问题。

转载地址:http://wclzl.baihongyu.com/

你可能感兴趣的文章
sublime text2配置
查看>>
library 'system/lib/libhoudini.so' not find
查看>>
TCP UDP socket debug tools
查看>>
网页矢量图在组态软件中的应用
查看>>
disabled by the php.ini setting phar.readonly
查看>>
mysql远程连接
查看>>
application 启动多次
查看>>
在Array原型链上扩展remove,contain等方法所遇到的坑
查看>>
快排class
查看>>
列出文件和目录
查看>>
字典功能的简单实现
查看>>
Mac OS X 下搭建 Java 开发环境图解
查看>>
JBPM4或Activiti5的流程任务分发与汇总
查看>>
android4.0 在ubuntu10.04(64位)上的下载与编译
查看>>
记一次在 Linux 上创建 Django 应用的过程
查看>>
C++反射机制的实现
查看>>
ace admin模板实现伪无刷新模式的方法
查看>>
LayaAir 自旋转的小球 横向移动
查看>>
翻译WifiConfiguration类
查看>>
Win2008 IIS 7.0+php,MySQL,Zend,phpMyadmin配置图解
查看>>