Идти обработка ошибок при возвращении структуры
Насколько я могу судить(из здесь и из чтения библиотеки standerd), idomatic способ обработки ошибок в библиотеке, возвращающей как ваши данные, так и ошибку.
Вопрос в том, когда я выполняю, чтобы вернуть ошибку, что я возвращаю как мои данные? Пустая конструкция? 0?
Вот пример
// Load the config
func LoadConfig(location string) (Config, error) {
// Read the file
configFile, err := ioutil.ReadFile(location)
if err != nil {
return Config{}, err
}
// Convert it to Config struct
var config Config
json.Unmarshal(configFile, &config)
return config, nil
}
Это идиоматично?
1 ответ:
Зависит от контекста. Вы можете вернуть пустое значение для соответствующего типа или
nil
, если возвращаемый тип является указателем. Но вы также можете вернуть частичный результат вместе с ошибкой, если это имеет смысл для функции. Например, в пакетеbufio
Reader.ReadString
возвращает строку и ошибку. Состояние docs:Если строка ReadString обнаруживает ошибку до нахождения разделителя, она возвращает данные, прочитанные до ошибки, и саму ошибку (часто io.ВФ).