聊天模块修改&聊天群组模块&用户好友关模块系完善

This commit is contained in:
2025-07-16 18:48:15 +08:00
parent 0dea3c0348
commit 42f4779fcf
12 changed files with 9477 additions and 16 deletions

View File

@@ -137,3 +137,37 @@ func GetID() (int64, error) {
})
return generator.Generate()
}
// GenerateChatGroupID 生成唯一的群组ID
// 格式: group-{时间戳}-{随机字符串}
// 时间戳使用秒级,确保一定的时间顺序性
// 随机字符串确保在同一秒内生成的ID也能保持唯一
func GenerateChatGroupID() string {
// 获取当前时间戳(秒级)
timestamp := time.Now().Unix()
// 生成随机字节
randomBytes := make([]byte, 8) // 8字节=64位足够产生足够随机的字符串
_, err := rand.Read(randomBytes)
if err != nil {
// 极端情况下随机数生成失败,使用伪随机数作为 fallback
// 这种情况发生概率极低,但仍需处理以保证函数可用性
randStr := fmt.Sprintf("%016x", time.Now().UnixNano())
return fmt.Sprintf("group-%d-%s", timestamp, randStr[:12])
}
// 将随机字节转换为URL安全的Base64字符串去掉末尾可能的=号
randStr := base64.URLEncoding.EncodeToString(randomBytes)
randStr = trimBase64Padding(randStr)
// 组合成最终的群组ID
return fmt.Sprintf("group-%d-%s", timestamp, randStr)
}
// trimBase64Padding 移除Base64字符串末尾的填充字符=
func trimBase64Padding(s string) string {
for len(s) > 0 && s[len(s)-1] == '=' {
s = s[:len(s)-1]
}
return s
}