Projekt ausführen

go run main.go

Öffnen Sie den Webbrowser und gehen Sie zu http://localhost:8080

Testen

Holen Sie sich alle Produkte

Klicken Sie auf die Schaltfläche „Produkte abrufen“. Die API gibt alle Produktdaten zurück.

\\\"Create

Produkt nach ID abrufen

Klicken Sie auf die Schaltfläche „Produkt abrufen“ und geben Sie „1“ als Produkt-ID ein. Die API gibt Produktdaten zurück.

\\\"Create

Produkt erstellen

Klicken Sie auf die Schaltfläche „Produkt erstellen“ und geben Sie „test-create“ als Produktnamen und „100“ als Preis ein. Die API gibt ein neu erstelltes Produkt zurück.

\\\"Create

Produkt aktualisieren

Klicken Sie auf die Schaltfläche „Produkt aktualisieren“ und geben Sie „101“ für die Produkt-ID und „test-update“ für den Namen und „200“ für den Preis ein. Die API gibt ein aktualisiertes Produkt zurück.

\\\"Create

Produkt löschen

Klicken Sie auf die Schaltfläche „Produkt löschen“ und geben Sie „101“ als Produkt-ID ein. Die API gibt nichts zurück, was akzeptabel ist, da wir von unserer API nichts zurückgeben.

\\\"Create

Abschluss

In diesem Artikel haben Sie erfahren, wie Sie das Gin-Framework erstellen und einrichten, um eine CRUD-API zu erstellen. Nutzen Sie GORM als ORM, um die CRUD-Operationen in der Datenbank auszuführen. Testen Sie unsere API mit JavaScript. Ich hoffe, dass Ihnen der Artikel gefällt.

Quellcode: https://github.com/StackPuz/Example-CRUD-Go

Erstellen Sie eine CRUD-Web-App: 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"}}
„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Erstellen Sie eine CRUD-API mit Go

Erstellen Sie eine CRUD-API mit Go

Veröffentlicht am 15.08.2024
Durchsuche:959

Create a CRUD API with Go

Die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) sind die Grundfunktionen jeder Webanwendung bei der Arbeit mit einer Datenbank. Dieses Beispiel zeigt Ihnen, wie Sie die CRUD-API mit Go erstellen und MySQL als Datenbank verwenden.

Voraussetzungen

  • Go 1.21
  • MySQL

Setup-Projekt

Einrichten der Go-Projektabhängigkeiten.

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

Erstellen Sie eine Testdatenbank mit dem Namen „example“ und führen Sie die Datei „database.sql“ aus, um die Tabelle und die Daten zu importieren.

Projektstruktur

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

Projektdateien

.env

Diese Datei enthält die Datenbankverbindungsinformationen.

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

db.go

Diese Datei richtet die Datenbankverbindung mithilfe von GORM ein. Es deklariert eine globale Variable DB, die die Datenbankverbindungsinstanz zur späteren Verwendung in unserer Anwendung enthält.

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
}

router.go

Diese Datei richtet das Routing für eine Gin-Webanwendung ein. Es initialisiert einen Router, stellt eine statische index.html-Datei an der Stamm-URL bereit und definiert API-Routen für CRUD-Vorgänge.

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()
}

Produkt.go

Diese Datei definiert das Produktmodell für die Anwendung. Dieses Modell wird für Datenbankoperationen mit Produkten verwendet.

package models

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

product_controller.go

Diese Datei definiert alle Funktionen, die zur Bearbeitung eingehender Anfragen und zur Durchführung aller CRUD-Operationen erforderlich sind.

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() analysiert die JSON-Nutzlast aus dem Anfragetext in eine Go-Struktur.

config.DB die GORM-Instanz, die zum Ausführen der gewünschten Datenbankoperation verwendet wird.

c.JSON() sendet eine JSON-Antwort mit dem Ergebnis der Operation und dem entsprechenden HTTP-Statuscode.

main.go

Diese Datei ist der Haupteinstiegspunkt unserer Anwendung. Es wird die Gin-Webanwendung erstellen und einrichten.

package main

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

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

index.html

Diese Datei wird verwendet, um eine grundlegende Benutzeroberfläche zum Testen unserer API zu erstellen.


    

Example CRUD

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/stackpuz/create-a-crud-api-with-go-964?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3