运行项目

go run main.go

打开网络浏览器并转到http://localhost:8080

测试

获取所有产品

单击“获取产品”按钮。 API将返回所有产品数据。

\\\"Create

通过 ID 获取产品

点击“获取产品”按钮并输入“1”作为产品 ID。 API将返回产品数据。

\\\"Create

创建产品

点击“创建产品”按钮,输入产品名称“test-create”,价格输入“100”。 API 将返回新创建的产品。

\\\"Create

更新产品

点击“更新产品”按钮,输入“101”作为产品 ID,“test-update”作为名称,“200”作为价格。 API 将返回更新的产品。

\\\"Create

删除产品

点击“删除产品”按钮并输入“101”作为产品 ID。 API 不会返回任何内容,这是可以接受的,因为我们不会从 API 中返回任何内容。

\\\"Create

结论

在本文中,您学习了如何创建和设置 Gin 框架以创建 CRUD API。使用 GORM 作为 ORM 对数据库执行 CRUD 操作。使用 JavaScript 测试我们的 API。我希望你会喜欢这篇文章。

源代码:https://github.com/StackPuz/Example-CRUD-Go

创建 CRUD Web 应用程序:https://stackpuz.com

","image":"http://www.luping.net/uploads/20240815/172373328366be1523a3829.jpg","datePublished":"2024-08-15T22:48:03+08:00","dateModified":"2024-08-15T22:48:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Go 创建 CRUD API

使用 Go 创建 CRUD API

发布于2024-08-15
浏览:937

Create a CRUD API with Go

CRUD 操作(创建、读取、更新、删除)是任何 Web 应用程序使用数据库时的基本功能。本示例将向您展示如何使用 Go 创建 CRUD API 并使用 MySQL 作为数据库。

先决条件

  • Go 1.21
  • MySQL

设置项目

设置 Go 项目依赖项。

go mod init app
go get github.com/gin-gonic/gin
go get gorm.io/gorm
go get gorm.io/driver/mysql
go get github.com/joho/godotenv

创建名为“example”的测试数据库,并运行database.sql文件导入表和数据。

项目结构

├─ .env
├─ main.go
├─ config
│  └─ db.go
├─ controllers
│  └─ product_controller.go
├─ models
│  └─ product.go
├─ public
│  └─ index.html
└─ router
   └─ router.go

项目文件

.env

该文件包含数据库连接信息。

DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=example
DB_USER=root
DB_PASSWORD=

数据库Go

此文件使用 GORM 设置数据库连接。它声明了一个全局变量 DB 来保存数据库连接实例,以便稍后在我们的应用程序中使用。

package config

import (
    "fmt"
    "os"

    "github.com/joho/godotenv"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
)

var DB *gorm.DB

func SetupDatabase() {
    godotenv.Load()
    connection := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_DATABASE"))
    db, _ := gorm.Open(mysql.Open(connection), &gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true}})
    DB = db
}

路由器.go

此文件为 Gin Web 应用程序设置路由。它初始化路由器,在根 URL 处提供静态 index.html 文件,定义 CRUD 操作的 API 路由。

package router

import (
    "app/controllers"

    "github.com/gin-gonic/gin"
)

func SetupRouter() {
    productController := controllers.ProductController{}
    router := gin.Default()
    router.StaticFile("/", "./public/index.html")
    router.Group("/api").
        GET("/products", productController.Index).
        POST("/products", productController.Create).
        GET("/products/:id", productController.Get).
        PUT("/products/:id", productController.Update).
        DELETE("/products/:id", productController.Delete)
    router.Run()
}

产品.go

此文件定义应用程序的产品模型。该模型用于涉及产品的数据库操作。

package models

type Product struct {
    Id int `gorm:"primaryKey;autoIncrement"`
    Name string
    Price float64
}

产品控制器.go

此文件定义了处理传入请求和执行任何 CRUD 操作所需的所有函数。

package controllers

import (
    "app/config"
    "app/models"
    "net/http"
    "strconv"

    "github.com/gin-gonic/gin"
)

type ProductController struct {
}

func (con *ProductController) Index(c *gin.Context) {
    var products []models.Product
    config.DB.Find(&products)
    c.JSON(http.StatusOK, products)
}

func (con *ProductController) Get(c *gin.Context) {
    var product models.Product
    config.DB.First(&product, c.Params.ByName("id"))
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Create(c *gin.Context) {
    var product models.Product
    c.BindJSON(&product)
    if err := config.DB.Create(&product).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Update(c *gin.Context) {
    var product models.Product
    c.BindJSON(&product)
    product.Id, _ = strconv.Atoi(c.Params.ByName("id"))
    if err := config.DB.Updates(&product).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Delete(c *gin.Context) {
    var product models.Product
    if err := config.DB.Delete(&product, c.Params.ByName("id")).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.Status(http.StatusOK)
}

c.BindJSON() 将请求正文中的 JSON 负载解析为 Go 结构体。

config.DB 用于执行所需数据库操作的 GORM 实例。

c.JSON() 发送带有操作结果和相应 HTTP 状态代码的 JSON 响应。

主程序

该文件是我们应用程序的主要入口点。它将创建并设置 Gin Web 应用程序。

package main

import (
    "app/config"
    "app/router"
)

func main() {
    config.SetupDatabase()
    router.SetupRouter()
}

索引.html

此文件将用于创建用于测试我们的 API 的基本用户界面。


    


    

Example CRUD

版本声明 本文转载于:https://dev.to/stackpuz/create-a-crud-api-with-go-964?1如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3