package main import ( "fmt" "sync" ) var ( mu sync.RWMutex CacheUsers = make(map[uint32]*User) Groups = make(map[uint32]*Group) ) func CacheGetUserById(id uint32) (*User, error) { mu.RLock() defer mu.RUnlock() user, ok := CacheUsers[id] if !ok { return nil, fmt.Errorf("user %d not found", id) } return user, nil } func CacheGetUserByName(name string) (*User, error) { mu.RLock() defer mu.RUnlock() for _, user := range CacheUsers { if user.Name == name { return user, nil } } return nil, fmt.Errorf("user %s not found", name) } func CacheSaveUser(user *User) { mu.Lock() defer mu.Unlock() CacheUsers[user.Id] = user } func CacheDeleteUser(id uint32) { mu.Lock() defer mu.Unlock() delete(CacheUsers, id) } func CacheSaveGroup(group *Group) { mu.Lock() defer mu.Unlock() Groups[group.Id] = group } func CacheGetGroup(id uint32) (*Group, error) { mu.RLock() defer mu.RUnlock() group, ok := Groups[id] if !ok { return nil, fmt.Errorf("group %d not found", id) } return group, nil }