fix(channel): 修复 invalidateCache 存入 typed nil 导致 loadCache panic

invalidateCache 存入 (*channelCache)(nil),类型断言 ok=true 但
指针为 nil,后续 cached.loadedAt 导致 nil pointer dereference。
在 loadCache 双重检查处增加 cached != nil 防御。
This commit is contained in:
erio
2026-03-31 18:37:30 +08:00
parent eb385457b2
commit 3457bcbfcd

View File

@@ -137,7 +137,7 @@ func NewChannelService(repo ChannelRepository, authCacheInvalidator APIKeyAuthCa
// loadCache 加载或返回缓存的渠道数据
func (s *ChannelService) loadCache(ctx context.Context) (*channelCache, error) {
if cached, ok := s.cache.Load().(*channelCache); ok {
if cached, ok := s.cache.Load().(*channelCache); ok && cached != nil {
if time.Since(cached.loadedAt) < channelCacheTTL {
return cached, nil
}
@@ -145,7 +145,7 @@ func (s *ChannelService) loadCache(ctx context.Context) (*channelCache, error) {
result, err, _ := s.cacheSF.Do("channel_cache", func() (any, error) {
// 双重检查
if cached, ok := s.cache.Load().(*channelCache); ok {
if cached, ok := s.cache.Load().(*channelCache); ok && cached != nil {
if time.Since(cached.loadedAt) < channelCacheTTL {
return cached, nil
}