Service.GetItem/CreateItem: ревью работы с кешем и БД

Код-ревьюMiddle25 минпроверка — Спринт23-t010

Сделайте код-ревью сервиса каталога: GetItem сначала читает сущность из кеша, при отсутствии — из БД; CreateItem сохраняет новую сущность. Найдите и объясните проблемы, предложите исправления. Типы Store, Cache, Logger, Item объявлены в другом файле пакета.

Как на собесе: 25 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.

review.gogo
1package catalog2 3import (4	"context"5)6 7type Service struct {8	store  Store9	logger Logger10	cache  Cache11}12 13func New(store Store, logger Logger, cache Cache) Service {14	return &Service{15		store:  store,16		logger: logger,17		cache:  cache,18	}19}20 21// GetItem возвращает сущность по её ID22func (s Service) GetItem(_ context.Context, id int64) (Item, error) {23	item, err := s.cache.GetItem(id)24	if err != nil {25		return nil, err26	}27 28	if item != nil {29		return item, nil30	}31 32	item, err := s.store.GetItem(context.Background(), id)33	if err != nil {34		return nil, err35	}36 37	return item, nil38}39 40// CreateItem сохраняет новую сущность41func (s Service) CreateItem(c context.Context, it Item) error {42	_, err := s.store.CreateItem(c, it)43	if err != nil {44		return err45	}46 47	return nil48}
⌘ Enter — проверить