使用 Go 構建 Web 應用:MVC 模式、Gin 框架、GORM 和 JWT
在本文中,我們將使用 Go 編程語言構建一個 Web 應用程序,利用 Gin 框架進行路由,GORM 進行數據庫交互,並使用 JWT(JSON Web Tokens)進行身份驗證。應用程序將採用 MVC(模型 - 視圖 - 控制器)設計模式,以促進關注點的清晰分離。
前置條件
在開始之前,請確保您具備以下條件:
-
已在您的計算機上安裝 Go(版本 1.16 或更高)。
-
已設置 PostgreSQL 數據庫。
-
具備 Go、HTTP 和 RESTful API 的基礎知識。
項目結構
以下是我們將使用的項目結構的詳細概述:
/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