基于Gin的IM聊天架构——HiChat

基于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:认证技术,用于生成和解析用户认证令牌。

每种技术都有自己擅长的应用场景,搭配在一起可以提升项目的可维护性、性能和安全性。希望这些介绍对你有帮助!

本文作者:Gold_stein

本文链接:https://www.cnblogs.com/smartljy/p/18522829

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Gold_stein  阅读(31)  评论(0编辑  收藏  举报
历史上的今天:
2023-11-03 1118.分成互质组
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 逃离地面 RAD & 三浦透子
逃离地面 - RAD & 三浦透子
00:00 / 00:00
An audio error has occurred.

作词 : 野田洋次郎

作曲 : 野田洋次郎

空飛ぶ羽根と引き換えに 繋ぎ合う手を選んだ僕ら

それでも空に魅せられて 夢を重ねるのは罪か

夏は秋の背中を見て その顔を思い浮かべる

憧れなのか、恋なのか 叶わぬと知っていながら

重力が眠りにつく 1000年に一度の今日

太陽の死角に立ち 僕らこの星を出よう

彼が眼を覚ました時 連れ戻せない場所へ

「せーの」で大地を蹴って ここではない星へ

行こう

もう少しで運命の向こう もう少しで文明の向こう

もう少しで運命の向こう もう少しで

夢に僕らで帆を張って 来たるべき日のために夜を超え

いざ期待だけ満タンで あとはどうにかなるさと 肩を組んだ

怖くないわけない でも止まんない

ピンチの先回りしたって 僕らじゃしょうがない

僕らの恋が言う 声が言う

「行け」と言う