各人好,我是模范员幽鬼。
透明度Fiber 算作一个新的 Go 框架,似乎受追捧进度很高,Star 数飙升很快。不知说念这是不是标明,不少 JS/Node 嗜好者脱手尝试学习 Go 了,对 Go 是善事。
今天这篇著作先容何如使用 Fiber + Gorm 构建 REST API。
皇冠客服飞机:@seo3687
1 概览在这篇著作中,咱们将使用 Fiber[1] 框架,它使用起来相当浅薄,有一个很好的概括层,何况包含咱们创建 API 所需的一切。
对于与数据库的交互,我决定使用 ORM 来使通盘经由更浅薄、更直不雅,因此我决定使用Gorm[2],在我看来,Gorm[3] 是 Go 寰球中最受接待的 ORM,何况特质好多。
2 准备责任本文基于 Go1.17.5。
在土产货创建一个目次 fibergorm,然后干与该目次实行如下敕令:
$ 威尼斯人彩票网go mod init github.com/programmerug/fibergorm go: creating new go.mod: module github.com/programmerug/fibergorm
接果真行如下敕令,装配咱们需要的依赖:(这个先伪善行,之后通过 go mod tidy 装配)
go get github.com/gofiber/fiber/v2 go get gorm.io/gorm
为了便捷,本教程中,咱们使用 SQLite,因为使用了 Gorm,是以哪种关系型数据库对中枢代码莫得什么影响。
3 脱手编码本文以东说念主类的一又友——狗为例。
先从界说实体脱手,它总计有四个属性:
Name - 狗的名字 Age - 狗的年级 Breed - 狗的种族(类型) IsGoodBoy - 狗是否是个好孩子同样以下内容:
澳门六合彩色碟// 文献名:entities/dog.go package entities import "gorm.io/gorm" type Dog struct { gorm.Model Name string `json:"name"` Age int `json:"age"` Breed string `json:"breed"` IsGoodBoy bool `json:"is_good_boy" gorm:"default:true"` }
瞩目其中的内嵌类型 gorm.Model,它仅仅界说了一些通用的字段。
type Model struct { ID uint `gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt DeletedAt `gorm:"index"` }
因此,咱们十足不错我方弃取是否要镶嵌 gorm.Model。
欧博网址接着,咱们树立与数据库的相连。一般我可爱创建一个名为 Connect() 的函数,欧博代理网址它厚爱运行化相连,此外还厚爱在咱们的数据库中实行移动(migration),即生成表结构:
// 文献名:config/database.go package config import ( "github.com/programmerug/fibergorm/entities" "gorm.io/driver/sqlite" "gorm.io/gorm" ) var Database *gorm.DB func Connect() error { var err error Database, err = gorm.Open(sqlite.Open("fibergorm.db"), &gorm.Config{}) if err != nil { panic(err) } Database.AutoMigrate(&entities.Dog{}) return nil }fibergorm.db 是终末生成的数据库文献 在模范启动时,需要调用 Connect 函数
当今仍是界说了实体并树立了到数据库的相连,咱们不错脱手惩处咱们的惩处模范。咱们的每个惩处模范皆将对应来自 API 的一个路由,每个惩处模范只厚爱实行一个操作。最初让咱们取得数据库表中的整个记载。
// 文献名:handlers/dog.go package handlers import ( "github.com/gofiber/fiber/v2" "github.com/programmerug/fibergorm/config" "github.com/programmerug/fibergorm/entities" ) func GetDogs(c *fiber.Ctx) error { var dogs []entities.Dog config.Database.Find(&dogs) return c.Status(200).JSON(dogs) } // ...
当今凭据将在苦求参数中发送的 id 参数取得一笔记载。
// 文献名:handlers/dog.go package handlers // ... func GetDog(c *fiber.Ctx) error { id := c.Params("id") var dog entities.Dog result := config.Database.Find(&dog, id) if result.RowsAffected == 0 { return c.SendStatus(404) } return c.Status(200).JSON(&dog) } // ...
当今咱们不错得到整个的记载和凭据 id 取得一笔记载。但衰退在数据库表中插入新记载的功能。
博彩平台是否支持电脑客户端// 文献名:handlers/dog.go package handlers // ... func AddDog(c *fiber.Ctx) error { dog := new(entities.Dog) if err := c.BodyParser(dog); err != nil { return c.Status(503).SendString(err.Error()) } config.Database.Create(&dog) return c.Status(201).JSON(dog) } // ...
咱们还需要添加更新数据库中现存记载的功能。与咱们仍是齐备的同样,使用id参数来更新特定记载。
皇冠体育 维基百科// 文献名:handlers/dog.go package handlers // ... func UpdateDog(c *fiber.Ctx) error { dog := new(entities.Dog) id := c.Params("id") if err := c.BodyParser(dog); err != nil { return c.Status(503).SendString(err.Error()) } config.Database.Where("id = ?", id).Updates(&dog) return c.Status(200).JSON(dog) } // ... 终末,咱们需要删除特定记载,再次使
终末,咱们需要删除特定记载,再次使用 id 参数从咱们的数据库中删除特定记载。
// 文献名:handlers/dog.go package handlers // ... func RemoveDog(c *fiber.Ctx) error { id := c.Params("id") var dog entities.Dog result := config.Database.Delete(&dog, id) if result.RowsAffected == 0 { return c.SendStatus(404) } return c.SendStatus(200) } // ...
当今只需要创建咱们的 main 文献,该文献将厚爱运行化与数据库的相连以及咱们的 API 路由将在那里界说,何况将惩处模范与它们进行关联绑定。
// 文献名:main.go package main import ( "log" "github.com/gofiber/fiber/v2" "github.com/programmerug/fibergorm/config" "github.com/programmerug/fibergorm/handlers" ) func main() { app := fiber.New() config.Connect() app.Get("/dogs", handlers.GetDogs) app.Get("/dogs/:id", handlers.GetDog) app.Post("/dogs", handlers.AddDog) app.Put("/dogs/:id", handlers.UpdateDog) app.Delete("/dogs/:id", handlers.RemoveDog) log.Fatal(app.Listen(":3000")) }
至此,咱们完成了一个浅薄诈欺的 CRUD。波及到 fiber 和 gorm 的 API 你应该查阅关系文档进一步了解。
最终,名堂目次如下:
├── config │ └── database.go ├── entities │ └── dog.go ├── fibergorm.db ├── go.mod ├── go.sum ├── handlers │ └── dog.go └── main.go
实行 go run main.go:
$ go run main.go ┌───────────────────────────────────────────────────┐ │ Fiber v2.24.0 │ │ http://127.0.0.1:3000 │ │ (bound on host 0.0.0.0 and port 3000) │ │ │ │ Handlers ............. 7 Processes ........... 1 │ │ Prefork ....... Disabled PID ............. 89910 │ └───────────────────────────────────────────────────┘
借助 postman、curl 之类的用具考证接口的正确性。
新宝投注因为 fiber Ctx 的 BodyParser 好像判辨 Context-Type 值是:application/json, application/xml, application/x-www-form-urlencoded, multipart/form-data 等的数据,是以,考证 AddDog 的不错聘请你可爱的 Content-Type。
curl --location --request POST 'http://127.0.0.1:3000/dogs' \ --header 'Content-Type: application/json' \ --data '{name:"旺财",age:3,breed:"狼狗",is_good_boy:true}'
不错通过下载 https://sqlitebrowser.org/dl/ 这个 SQLite 用具调查数据是否保存告捷。
我们致力于为广大博彩爱好者提供最专业的博彩服务和最多样化的博彩游戏,以及最全面、最优质的博彩攻略和技巧分享,让您在博彩游戏中获得更多的乐趣和收益。肃穆的读者可能会发现,生成的数据表字段法例是凭据 Dog 中的字段界说法例细则的。有免强症的东说念主可能收受不了,因此实质中你不错不镶嵌 gorm.Model,而是我方界说关系字段。
回来本文齐备了 CRUD 的功能,但愿各人实质入手,这么身手够真确掌持。
本文参考 https://dev.to/franciscomendes10866/how-to-build-rest-api-using-go-fiber-and-gorm-orm-2jbe。
本文完好代码:https://github.com/programmerug/fibergorm。
参考辛勤
德布劳内也向曼城推荐了自己的同胞。不过这笔引援也可能会对帕尔默、麦卡蒂的未来产生未知影响,瓜帅此前表示帕尔默要么永久离队要么留下。
[1]Fiber: https://gofiber.io/
[2]Gorm: https://gorm.io/
[3]Gorm: https://gorm.io/
赌球和体彩的区别
上一篇:没有了