package cache import ( "crypto/sha256" "encoding/hex" "fmt" "strings" ) // GenerateCacheKey 生成缓存键 // 使用原文+语言对进行SHA256哈希 func GenerateCacheKey(originalText, fromLang, toLang string) string { // 规范化语言代码 fromLang = normalizeLanguageCode(fromLang) toLang = normalizeLanguageCode(toLang) // 规范化原文 normalizedText := normalizeText(originalText) // 生成缓存键 data := fmt.Sprintf("%s|%s|%s", normalizedText, fromLang, toLang) hash := sha256.Sum256([]byte(data)) return hex.EncodeToString(hash[:]) } // normalizeLanguageCode 规范化语言代码 func normalizeLanguageCode(lang string) string { if lang == "" || lang == "auto" { return "auto" } return strings.ToLower(strings.TrimSpace(lang)) } // normalizeText 规范化文本 // 移除多余的空白字符,确保相同的文本生成相同的哈希 func normalizeText(text string) string { // 移除首尾空白 text = strings.TrimSpace(text) // 将多个连续空白字符替换为单个空格 text = strings.Join(strings.Fields(text), " ") return text } // GenerateCacheKeyWithModel 生成包含模型信息的缓存键 // 如果需要更精确的缓存,可以使用这个函数 func GenerateCacheKeyWithModel(originalText, fromLang, toLang, model string) string { // 规范化语言代码 fromLang = normalizeLanguageCode(fromLang) toLang = normalizeLanguageCode(toLang) // 规范化原文 normalizedText := normalizeText(originalText) // 规范化模型名称 model = strings.ToLower(strings.TrimSpace(model)) // 生成缓存键 data := fmt.Sprintf("%s|%s|%s|%s", normalizedText, fromLang, toLang, model) hash := sha256.Sum256([]byte(data)) return hex.EncodeToString(hash[:]) }