英文:
Go Error Handling when Returning Structs
问题
根据我所了解(来自这里和阅读标准库),在一个返回数据和错误的库中处理错误的惯用方式是什么。
问题是,当我确实需要返回一个错误时,我应该返回什么作为我的数据?一个空结构体?0?
这是一个例子:
// 加载配置
func LoadConfig(location string) (Config, error) {
// 读取文件
configFile, err := ioutil.ReadFile(location)
if err != nil {
return Config{}, err
}
// 将其转换为 Config 结构体
var config Config
json.Unmarshal(configFile, &config)
return config, nil
}
这种写法是否符合惯例?
英文:
As far as I can tell(from here, and from reading the standerd library), the idomatic way of handling errors in a library returning both your data and an error.
The question is, when I do run have to return an error, what do I return as my data? An empty struct? 0?
Here is an example
// 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
}
Is this idiomatic?
答案1
得分: 3
根据上下文而定。对应类型,你可以返回空值,或者如果返回类型是指针,则返回nil
。但是,如果对于该函数而言,返回部分结果和错误一起是有意义的,你也可以返回部分结果。例如,在bufio
包中,Reader.ReadString
函数返回字符串和错误。文档说明如下:
> 如果在找到分隔符之前,ReadString遇到错误,它会返回错误之前读取的数据以及错误本身(通常是io.EOF)。
英文:
Depends on the context. You can return the empty value for the corresponding type or nil
if the returned type is a pointer. But you could also return partial result together with the error if that makes sense for the function. For example in bufio
package Reader.ReadString
returns string and error. The docs state:
> If ReadString encounters an error before finding a delimiter, it returns the data read before the error and the error itself (often io.EOF).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论