首页 » 网站推广 » phpmysqlgetall技巧_运用GINGORM和MySql创建一个Rest API

phpmysqlgetall技巧_运用GINGORM和MySql创建一个Rest API

访客 2024-11-30 0

扫一扫用手机浏览

文章目录 [+]

资料来源: blog.logrocket.com

Go措辞是我们所生活的时期中最炙手可热的编程措辞之一。
Go利用非常大略,但是供应了与 C ++ 这样的底层措辞相似的性能 。
Go被认为是供应非常高性能的最快的编程措辞。
Gin 是Go令人难以置信的框架之一,它轻巧且速率极快。
Gin有趣的功能是它供应了 HttpRouter的 自定义版本, 这使得API路由比其他Go框架更快。
据称它比另一个名为 Martini的 Go框架快40倍 并且,与其他框架和其他编程措辞比较,它供应了更多的好处。
Gin只是 微 框架,无法像其他框架一样为您供应很多功能。
它只是为您供应构建api的必要工具,例如路由,验证等。
专家认为,Gin最适宜进行长期投资,以充分利用其高性能和灵巧性的上风。
本日,我们将利用Go,Gin,Gorm和Mysql数据库创建一个非常大略的API。
我们将为字段很少的用户数据实行CRUD操作。
您须要对Go有所理解,才能开始我们将要做的项目。
我们走吧!
哇,听起来很棒,不是吗?

phpmysqlgetall技巧_运用GINGORM和MySql创建一个Rest API

安装Go

您会创造很多材料,可以教您如何在打算机中安装Go。
我相信您已经在打算机中安装了Go,由于我们将为Go编写中间代码。
纵然尚未安装,也可以立即安装。
我有一篇非常有用的文章对您有所帮助,该文章有助于 在您的linux环境中 安装Go(https://radiant-brushlands-42789.herokuapp.com/better-programming/install-go-1-11-on-ubuntu-18-04-16-04-lts-8c098c503c5f) 。
每当您完成Go的安装或在打算机上安装Go时,只需检讨版本即可测试它是否正常运行。

phpmysqlgetall技巧_运用GINGORM和MySql创建一个Rest API
(图片来自网络侵删)

go version建立新工程

在go所在的src内为项目创建一个新文件夹。
就我而言,go位于主文件夹中,我在 go的src文件夹内创建了 first-api 文件夹。
现在,在您最喜好的编辑器中打开它,在我的例子中是VSCode。
因此,要初始化新模块,我们必须在项目内的vscode终端中输入以下命令。

go mod init

如果您稍后将其打开,则 此命令将在保存我们的外部软件包的同时创建 go.mod 文件。

安装包

这些是项目的外部软件包: mysqlgin gorm的 sql驱动程序
输入以下命令以将其安装在项目中。

go get github.com/go-sql-driver/mysqlgo get github.com/gin-gonic/gingo get github.com/jinzhu/gorm项目构造

当然,我们遵照MVC模式来创建模型,视图和掌握器的API。
但是'V'在这里仍旧保持沉默,由于我们现在正在创建API。
我们拥有数据库配置,模型,路径,掌握器,当然还有我们一贯以来最喜好的Main文件,它是我们项目的启动器。
我有用于创建项目构造的快照。

数据库设置

首先,请确保已将mysql安装到打算机上,并确保利用某些工具(如phpmyadmin,mysql workbench或任何其他工具)可以有效地利用数据库。
在mysql中创建一个新数据库,然后 在 Config 目录中的 Database.go 文件中 添加数据库配置 。
我已经添加了我的配置详细信息,您必须添加自己的配置详细信息。

//Config/Database.gopackage Configimport ( "fmt""github.com/jinzhu/gorm")var DB gorm.DB// DBConfig represents db configurationtype DBConfig struct { Host string Port int User string DBName string Password string}func BuildDBConfig() DBConfig { dbConfig := DBConfig{ Host: "localhost", Port: 3306, User: "root", Password: "1234", DBName: "first_go", } return &dbConfig}func DbURL(dbConfig DBConfig) string { return fmt.Sprintf( "%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.DBName, )}建立模型

现在,让我们为用户创建一个包含以下字段的模型:

姓名(name)电子邮件(email)电话(phone)地址(address)

我们 在 Models 目录中创建 UserModel.go 文件 。

//Models/UserModel.gopackage Modelstype User struct { Id uint `json:"id"` Name string `json:"name"` Email string `json:"email"` Phone string `json:"phone"` Address string `json:"address"`}func (b User) TableName() string { return "user"}配置路由(Routing)

同样,我们为项目创建工艺路线。
我们创建了一个小组来调度与用户干系的路由,并且在利用api时必须照顾好这个小组。
因此,让我们 在 Routes 文件夹中创建 Routes.go 文件 。
我们将不才面看到掌握器功能的实现。

//Routes/Routes.gopackage Routesimport ( "first-api/Controllers""github.com/gin-gonic/gin")//SetupRouter ... Configure routesfunc SetupRouter() gin.Engine { r := gin.Default() grp1 := r.Group("/user-api") { grp1.GET("user", Controllers.GetUsers) grp1.POST("user", Controllers.CreateUser) grp1.GET("user/:id", Controllers.GetUserByID) grp1.PUT("user/:id", Controllers.UpdateUser) grp1.DELETE("user/:id", Controllers.DeleteUser) } return r}创建掌握器(Controller)

我们处理 来自掌握器前真个 http要求
我们创建了不同的功能来处理由路由器路由到掌握器的特定要求。
我们 在 模型 内部 有 User.go 与数据库进行交互。
我们根据从数据库中得到的数据来响运用户。
如果没有缺点, 则将相应作为 StatusOK供应 ,如果得到缺点,则将供应缺点状态。
我们在个中创建 User.go 文件 掌握器 文件夹。

//Controllers/User.gopackage Controllersimport ( "first-api/Models" "fmt" "net/http""github.com/gin-gonic/gin")//GetUsers ... Get all usersfunc GetUsers(c gin.Context) { var user []Models.User err := Models.GetAllUsers(&user) if err != nil { c.AbortWithStatus(http.StatusNotFound) } else { c.JSON(http.StatusOK, user) }}//CreateUser ... Create Userfunc CreateUser(c gin.Context) { var user Models.User c.BindJSON(&user) err := Models.CreateUser(&user) if err != nil { fmt.Println(err.Error()) c.AbortWithStatus(http.StatusNotFound) } else { c.JSON(http.StatusOK, user) }}//GetUserByID ... Get the user by idfunc GetUserByID(c gin.Context) { id := c.Params.ByName("id") var user Models.User err := Models.GetUserByID(&user, id) if err != nil { c.AbortWithStatus(http.StatusNotFound) } else { c.JSON(http.StatusOK, user) }}//UpdateUser ... Update the user informationfunc UpdateUser(c gin.Context) { var user Models.User id := c.Params.ByName("id") err := Models.GetUserByID(&user, id) if err != nil { c.JSON(http.StatusNotFound, user) } c.BindJSON(&user) err = Models.UpdateUser(&user, id) if err != nil { c.AbortWithStatus(http.StatusNotFound) } else { c.JSON(http.StatusOK, user) }}//DeleteUser ... Delete the userfunc DeleteUser(c gin.Context) { var user Models.User id := c.Params.ByName("id") err := Models.DeleteUser(&user, id) if err != nil { c.AbortWithStatus(http.StatusNotFound) } else { c.JSON(http.StatusOK, gin.H{"id" + id: "is deleted"}) }}处理要求

这是获取数据并直接与我们的数据库进行交互的关键文件。
我们 在 Models 文件夹中创建 User.go 文件 来处理数据库要求。

//Models/User.gopackage Modelsimport ( "first-api/Config" "fmt"_ "github.com/go-sql-driver/mysql")//GetAllUsers Fetch all user datafunc GetAllUsers(user []User) (err error) { if err = Config.DB.Find(user).Error; err != nil { return err } return nil}//CreateUser ... Insert New datafunc CreateUser(user User) (err error) { if err = Config.DB.Create(user).Error; err != nil { return err } return nil}//GetUserByID ... Fetch only one user by Idfunc GetUserByID(user User, id string) (err error) { if err = Config.DB.Where("id = ?", id).First(user).Error; err != nil { return err } return nil}//UpdateUser ... Update userfunc UpdateUser(user User, id string) (err error) { fmt.Println(user) Config.DB.Save(user) return nil}//DeleteUser ... Delete userfunc DeleteUser(user User, id string) (err error) { Config.DB.Where("id = ?", id).Delete(user) return nil}设置做事器

这是我们项目的启动功能。
我们连接mysql,在此处自动迁移我们的模式和设置路由器形式。
我们必须 在项目的根目录中 创建 main.go。

//main.gopackage mainimport ( "first-api/Config" "first-api/Models" "first-api/Routes" "fmt""github.com/jinzhu/gorm")var err errorfunc main() { Config.DB, err = gorm.Open("mysql", Config.DbURL(Config.BuildDBConfig()))if err != nil { fmt.Println("Status:", err) }defer Config.DB.Close() Config.DB.AutoMigrate(&Models.User{})r := Routes.SetupRouter() //running r.Run()}

现在,我们都准备利用Go和Gin测试我们的第一个api!

演示版运行以下命令以启动做事器。

go run main.go

如果您在运行过程中碰着任何问题,请先将其修复,由于您可能在两者之间错过了一些东西。

终点

这些是我们将用于创建,更新,读取和删除用户数据的端点。

GET user-api/user → 检索所有用户数据POST ser-api/user →添加新的用户数据GET user- api/user/{id} →检索单个用户数据PUT user- api/user/{id} → 更新的用户数据DELETE user- api/user → 删除用户数据

现在,打开您拥有的端点测试工具;我们将利用 切实其实很棒的 Postman 。
请确保通过Postman以JSON格式插入数据,由于我们不在此模块中利用表单数据。

建立新利用者

在这里,我们将同时创建两个用户。

获取所有用户

获取我们数据库中所有可用的用户。

通过ID获取用户

获取Id = 1的用户的用户信息。

更新用户

为Id = 1的用户更新用户信息。

删除用户

删除Id = 2的用户。

这是我们利用Go,Gin,Gorm和Mysql构建非常非常大略的rest api。
Go可以做更多的事情。
未来几天,我将与您联系,供应更多与Go干系的文章。
如果您对本文有任何疑问,请不才面的评论中让我知道,或者如果您无法覆盖所有内容,那么我的Github存储库中也有完全版本的代码。
下篇再见!

敬请关注!

Github存储库: https : //github.com/SudeepTimalsina/first-go

原文地址:https://radiant-brushlands-42789.herokuapp.com/medium.com/wesionary-team/create-your-first-rest-api-with-golang-using-gin-gorm-and-mysql-d439bcc6f987

标签:

相关文章

今日头条算法引领个化信息时代的变革

信息爆炸时代已经到来。每个人都是信息的接收者和传播者。面对海量的信息,人们往往感到无所适从。为了解决这一问题,各大互联网公司纷纷推...

网站推广 2025-01-31 阅读1 评论0

今日头条算法信息推荐的秘密武器

信息爆炸的时代已经来临。人们每天都会接触到大量的信息,而如何从这些信息中筛选出有价值的内容,成为了亟待解决的问题。今日头条算法作为...

网站推广 2025-01-31 阅读1 评论0

今日头条算法精准推荐背后的技术奥秘

信息爆炸的时代已经来临。我们每天都要面对海量的信息,如何从这些信息中筛选出自己感兴趣的内容,成为了每个人都关心的问题。今日头条作为...

网站推广 2025-01-31 阅读1 评论0