StorageService.Fetch — рефакторинг загрузки файла из нескольких источников
Код-ревьюMiddle25 минпроверка — Спринт23-t002
Метод StorageService.Fetch по параметру source загружает данные либо с диска (os.ReadFile), либо из БД (database/sql, SELECT по path); ветка для source == "s3" не дописана. Сделайте ревью и рефакторинг этого кода.
Как на собесе: 25 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.
review.gogo
1packagemain23import(4"database/sql"5"fmt"6"os"7)89typeStorageServicestruct{}1011func(s*StorageService)Fetch(path,sourcestring)([]byte,error){12ifsource=="disk"{13returnos.ReadFile(path)14}elseifsource=="db"{15db,err:=sql.Open("postgres","dsn")16iferr!=nil{17returnnil,err18}1920rows,err:=db.Query("select blob from assets where path = ?",path)21iferr!=nil{22returnnil,err23}2425blob:=[]byte{}26err=rows.Scan(&blob)27iferr!=nil{28returnnil,err29}3031returnblob,nil32}elseifsource=="s3"{33// load from object storage34}3536returnnil,fmt.Errorf("unsupported source: %s",source)37}3839funcmain(){40s:=StorageService{}4142fromDB,err:=s.Fetch("some_path","db")43iferr!=nil{44panic(err)45}46fmt.Println(fromDB)4748fromDisk,err:=s.Fetch("some_path","disk")49iferr!=nil{50panic(err)51}52fmt.Println(fromDisk)53}