使用 Go 構建 Web 應用:MVC 模式、Gin 框架、GORM 和 JWT

在本文中,我們將使用 Go 編程語言構建一個 Web 應用程序,利用 Gin 框架進行路由,GORM 進行數據庫交互,並使用 JWT(JSON Web Tokens)進行身份驗證。應用程序將採用 MVC(模型 - 視圖 - 控制器)設計模式,以促進關注點的清晰分離。

前置條件

在開始之前,請確保您具備以下條件:

項目結構

以下是我們將使用的項目結構的詳細概述:

/go-gin-mvc
│
├── /config
│   └── config.go              # 數據庫連接設置
│
├── /controllers
│   └── userController.go      # 用戶管理邏輯
│
├── /models
│   └── user.go                # 用戶模型定義
│
├── /routes
│   └── routes.go              # 應用程序路由
│
├── /middleware
│   └── jwt.go                 # JWT身份驗證中間件
│
├── /utils
│   └── utils.go               # 工具函數(如需要)
│
└── main.go                    # 主應用程序入口

步驟 1:初始化項目

爲您的項目創建一個新目錄並初始化一個 Go 模塊:

mkdir go-gin-mvc
cd go-gin-mvc
go mod init go-gin-mvc

步驟 2:安裝所需的包

接下來,安裝 Gin、GORM 和 JWT 庫:

go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres
go get -u github.com/dgrijalva/jwt-go

步驟 3:配置

創建一個 config 文件夾,並添加一個 config.go 文件以處理數據庫連接設置。

// /config/config.go
package config

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

var DB *gorm.DB

func ConnectDatabase() {
    dsn := "host=localhost user=postgres password=P@ssw0rd db
    var err error
    DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        panic("Failed to connect to database")
    }
}

步驟 4:模型

創建一個 models 文件夾並添加您的數據模型。在此示例中,我們將使用一個 User 模型。

// /models/user.go
package models

import (
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    Username string `json:"username"`
    Password string `json:"password"`
}

步驟 5:控制器

在 controllers 文件夾中,爲用戶管理創建一個控制器。

// /controllers/userController.go
package controllers

import (
    "net/http"
    "github.com/gin-gonic/gin"
    "go-gin-mvc/config"
    "go-gin-mvc/models"
)

func RegisterUser(c *gin.Context) {
    var user models.User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    config.DB.Create(&user)
    c.JSON(http.StatusCreated, user)
}

步驟 6:JWT 中間件

創建一個 middleware 文件夾以處理 JWT 身份驗證。

// /middleware/jwt.go
package middleware

import (
    "net/http"
    "github.com/dgrijalva/jwt-go"
    "github.com/gin-gonic/gin"
)

func AuthenticateJWT() gin.HandlerFunc {
    return func(c *gin.Context) {
        tokenString := c.Request.Header.Get("Authorization")
        if tokenString == "" {
            c.JSON(http.StatusUnauthorized, gin.H{"error""Authorization header required"})
            c.Abort()
            return
        }
        token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
            return []byte("your-secret-key"), nil
        })
        if err != nil || !token.Valid {
            c.JSON(http.StatusUnauthorized, gin.H{"error""Invalid token"})
            c.Abort()
            return
        }
        c.Next()
    }
}

步驟 7:路由

在 routes 文件夾中設置應用程序路由。

// /routes/routes.go
package routes

import (
    "github.com/gin-gonic/gin"
    "go-gin-mvc/controllers"
    "go-gin-mvc/middleware"
)

func SetupRouter() *gin.Engine {
    r := gin.Default()
    r.POST("/register", controllers.RegisterUser)
    authorized := r.Group("/api")
    authorized.Use(middleware.AuthenticateJWT())
    {
        // 在此定義受保護的路由
    }
    return r
}

步驟 8:主應用程序文件

最後,創建主應用程序文件以初始化服務器。

// main.go
package main

import (
    "go-gin-mvc/config"
    "go-gin-mvc/routes"
)

func main() {
    config.ConnectDatabase()
    r := routes.SetupRouter()
    r.Run(":8080") // 在端口8080上運行
}

步驟 9:運行應用程序

使用以下命令運行您的應用程序:

go run main.go

您現在可以通過向 http://localhost:8080/register 發送包含用戶名和密碼的 JSON 主體的 POST 請求來測試您的應用程序。

在本文中,我們使用 Go 結合 Gin 框架、GORM 和 JWT 構建了一個 Web 應用程序。該應用程序遵循 MVC 設計模式,有助於保持結構清晰和關注點分離。您可以根據需要添加更多的路由、模型和視圖,以擴展功能。這一基礎設置爲使用 Go 構建更復雜的 Web 應用程序提供了堅實的起點。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mgOgE-lg0pOcrHwbpW_qsg