聊天模块修改&聊天群组模块&用户好友关模块系完善
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user