初始化用户习惯
()
| 31 | |
| 32 | // 初始化用户习惯 |
| 33 | func initUserHabits() error { |
| 34 | userHabits = &UserHabits{ |
| 35 | habits: make(map[string]int), |
| 36 | bigrams: make(map[string]int), |
| 37 | idioms: make(map[string]int), |
| 38 | } |
| 39 | |
| 40 | if file.IsNotExist(userHabitsFile) { |
| 41 | f, err := os.Create(userHabitsFile) |
| 42 | if err != nil { |
| 43 | return errors.New("创建用户习惯库时发生错误: " + err.Error()) |
| 44 | } |
| 45 | _ = f.Close() |
| 46 | return saveHabits() |
| 47 | } |
| 48 | |
| 49 | // 读取现有习惯数据 |
| 50 | habitsFile, err := os.ReadFile(userHabitsFile) |
| 51 | if err != nil { |
| 52 | return errors.New("读取用户习惯库时发生错误: " + err.Error()) |
| 53 | } |
| 54 | |
| 55 | var savedData struct { |
| 56 | Habits map[string]int `json:"habits"` |
| 57 | Bigrams map[string]int `json:"bigrams"` |
| 58 | Idioms map[string]int `json:"idioms"` |
| 59 | TotalWords int `json:"total_words"` |
| 60 | TotalIdioms int `json:"total_idioms"` |
| 61 | LastUpdate time.Time `json:"last_update"` |
| 62 | } |
| 63 | |
| 64 | if err := json.Unmarshal(habitsFile, &savedData); err != nil { |
| 65 | // 如果是旧格式,尝试兼容 |
| 66 | var oldHabits map[string]int |
| 67 | if err := json.Unmarshal(habitsFile, &oldHabits); err == nil { |
| 68 | savedData.Habits = oldHabits |
| 69 | // 从旧数据重新计算统计信息 |
| 70 | for _, count := range oldHabits { |
| 71 | savedData.TotalWords += count |
| 72 | } |
| 73 | } else { |
| 74 | return errors.New("解析用户习惯库时发生错误: " + err.Error()) |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | userHabits.mu.Lock() |
| 79 | defer userHabits.mu.Unlock() |
| 80 | |
| 81 | userHabits.habits = savedData.Habits |
| 82 | userHabits.bigrams = savedData.Bigrams |
| 83 | userHabits.idioms = savedData.Idioms |
| 84 | userHabits.totalWords = savedData.TotalWords |
| 85 | userHabits.totalIdioms = savedData.TotalIdioms |
| 86 | userHabits.lastUpdate = savedData.LastUpdate |
| 87 | |
| 88 | return nil |
| 89 | } |
| 90 |
no test coverage detected