Идти обработка ошибок при возвращении структуры


Насколько я могу судить(из здесь и из чтения библиотеки 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 2

1 ответ:

Зависит от контекста. Вы можете вернуть пустое значение для соответствующего типа или nil, если возвращаемый тип является указателем. Но вы также можете вернуть частичный результат вместе с ошибкой, если это имеет смысл для функции. Например, в пакете bufio Reader.ReadString возвращает строку и ошибку. Состояние docs:

Если строка ReadString обнаруживает ошибку до нахождения разделителя, она возвращает данные, прочитанные до ошибки, и саму ошибку (часто io.ВФ).