StorageService.Fetch — рефакторинг загрузки файла из нескольких источников

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

Метод StorageService.Fetch по параметру source загружает данные либо с диска (os.ReadFile), либо из БД (database/sql, SELECT по path); ветка для source == "s3" не дописана. Сделайте ревью и рефакторинг этого кода.

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

review.gogo
1package main2 3import (4	"database/sql"5	"fmt"6	"os"7)8 9type StorageService struct{}10 11func (s *StorageService) Fetch(path, source string) ([]byte, error) {12	if source == "disk" {13		return os.ReadFile(path)14	} else if source == "db" {15		db, err := sql.Open("postgres", "dsn")16		if err != nil {17			return nil, err18		}19 20		rows, err := db.Query("select blob from assets where path = ?", path)21		if err != nil {22			return nil, err23		}24 25		blob := []byte{}26		err = rows.Scan(&blob)27		if err != nil {28			return nil, err29		}30 31		return blob, nil32	} else if source == "s3" {33		// load from object storage34	}35 36	return nil, fmt.Errorf("unsupported source: %s", source)37}38 39func main() {40	s := StorageService{}41 42	fromDB, err := s.Fetch("some_path", "db")43	if err != nil {44		panic(err)45	}46	fmt.Println(fromDB)47 48	fromDisk, err := s.Fetch("some_path", "disk")49	if err != nil {50		panic(err)51	}52	fmt.Println(fromDisk)53}
⌘ Enter — проверить