У меня есть этот код, и мне не нравится, как он не упоминает, golint
не нравится с error should be the last type when returning multiple items (golint)
.Чтобы объяснить этот код:
- Я хочу предоставить пользователю право решать, заботятся ли они о какой-либо из возвращенных ошибок
- В частности, в этом коде аудиофайл иногда не нуженили требуется, и его можно игнорировать
- Видео и выходной файл, вероятно, всегда будут требоваться для всего, что делает пользователь
Я открыт для рефакторинга любым способом (будь торазбивая его на части, перемещая вещи и т. д.) Есть ли в Go более идиоматический способ достичь чего-то подобного?
// Download will download the audio and video files to a particular path
func (r *RedditVideo) Download() (outputVideoFileName string, outputAudioFileName string, errVideo error, errAudio error) {
outputVideoFile, errVideo := downloadTemporaryFile(
r.VideoURL,
TemporaryVideoFilePrefix,
)
if errVideo == nil {
outputVideoFileName = outputVideoFile.Name()
}
outputAudioFile, errAudio := downloadTemporaryFile(
r.AudioURL,
TemporaryAudioFilePrefix,
)
if errAudio == nil {
outputAudioFileName = outputAudioFile.Name()
}
return outputVideoFileName, outputAudioFileName, errVideo, errAudio
}
Точно так же я обнаружил, что снова использую этот же шаблон позжев коде:
// SetFiles sets up all of the input files and the output file
func (l *localVideo) SetFiles(inputVideoFilePath string, inputAudioFilePath string, outputVideoFilePath string) (errVideo error, errAudio error, errOutputVideo error) {
// Set input video file
l.inputVideoFile, errVideo = os.Open(inputVideoFilePath)
if errVideo != nil {
return
}
if errVideo = l.inputVideoFile.Close(); errVideo != nil {
return
}
// Set output video file
l.outputVideoFile, errOutputVideo = os.Create(outputVideoFilePath)
if errOutputVideo != nil {
return
}
if errOutputVideo = l.outputVideoFile.Close(); errOutputVideo != nil {
return
}
// IMPORTANT! Set input audio file LAST incase it is nil
l.inputAudioFile, errAudio = os.Open(inputAudioFilePath)
if errAudio != nil {
return
}
if errAudio = l.inputAudioFile.Close(); errVideo != nil {
return
}
return
}
На этот раз в этом коде снова то же самое, что и выше:
- Мы заботимся о том, что видео и выход настроены и могутили может не заботиться об аудио
- Существует несколько ошибок, которые нужно обработать, которые оставлены на усмотрение пользователя