基於Gin的IM聊天架構——HiChat

Gold_stein發表於2024-11-03

基於Gin的IM聊天架構——HiChat


參考部落格:Hichat作者部落格

因為原部落格已經比較詳細,所以這裡僅記錄遇到的新知識點和遇到的問題。


專案初始化

在你的技術棧中,Viper、Gorm、Zap、Md5、Jwt 是各自領域的常用工具庫或技術,以下是它們的詳細介紹:

1. Viper

  • 用途:Viper 是 Go 語言中用於配置管理的庫。它可以讀取配置檔案(如 JSON、YAML、TOML、HCL 等)、環境變數、命令列引數等。
  • 功能:支援動態配置、熱過載以及根據環境選擇不同的配置,非常適合大型專案。
  • 使用場景:在專案中用來管理不同環境的配置,如開發環境、生產環境的資料庫、快取等不同配置。

示例

import "github.com/spf13/viper"

viper.SetConfigFile("config.yaml")
viper.ReadInConfig()
dbHost := viper.GetString("database.host")

2. Gorm

  • 用途:Gorm 是一個強大的 Go 語言 ORM(物件關係對映) 框架,支援各種資料庫,如 MySQL、PostgreSQL、SQLite 等。
  • 功能:提供簡單的查詢、關係對映、遷移、鉤子等功能,簡化資料庫操作。
  • 使用場景:在專案中可以用 Gorm 替代 SQL 查詢語句,以物件和方法的方式處理資料庫操作。

示例

import "gorm.io/gorm"

type User struct {
    ID   uint
    Name string
    Age  int
}

db.Create(&User{Name: "Alice", Age: 25})
var user User
db.First(&user, "name = ?", "Alice")

3. Zap

  • 用途:Zap 是由 Uber 開發的 高效能日誌庫,專門用於高效能的日誌記錄。
  • 功能:Zap 支援結構化日誌,具有效能高、靈活、易用等特點。
  • 使用場景:在需要記錄應用日誌的情況下,Zap 可用於記錄錯誤、警告、除錯資訊等,支援不同的日誌級別和格式化選項。

示例

import "go.uber.org/zap"

logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("This is an info message")
logger.Error("This is an error message")

4. MD5

  • 用途:MD5(訊息摘要演算法)是一種加密雜湊函式,生成一個 128 位的雜湊值。雖然它不再適合密碼學用途,但在一些簡單的資料校驗中仍然被使用。
  • 功能:將輸入資料轉換成固定長度的雜湊值,用於校驗資料一致性。
  • 使用場景:在專案中可以用 MD5 生成資料的雜湊值進行校驗或簡易加密。

示例

import (
    "crypto/md5"
    "encoding/hex"
)

func GetMD5Hash(text string) string {
    hash := md5.Sum([]byte(text))
    return hex.EncodeToString(hash[:])
}

5. JWT(JSON Web Token)

  • 用途:JWT 是一種用於認證的標準,它將使用者資訊以 JSON 物件的形式儲存在加密的令牌中。
  • 功能:透過數字簽名保證資料的完整性,常用於生成訪問令牌,用於客戶端和伺服器間的安全通訊。
  • 使用場景:在專案中用來建立使用者的認證令牌,在客戶端和伺服器之間傳遞使用者身份資訊,實現無狀態的使用者認證。

示例

import "github.com/golang-jwt/jwt/v4"

func GenerateJWT() (string, error) {
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "username": "Alice",
        "admin": true,
    })
    tokenString, err := token.SignedString([]byte("your-256-bit-secret"))
    return tokenString, err
}

總結

  • Viper:配置管理工具。
  • Gorm:ORM 框架,簡化資料庫操作。
  • Zap:高效能日誌記錄庫。
  • MD5:雜湊演算法,適合簡單資料校驗。
  • JWT:認證技術,用於生成和解析使用者認證令牌。

每種技術都有自己擅長的應用場景,搭配在一起可以提升專案的可維護性、效能和安全性。希望這些介紹對你有幫助!

相關文章