返回的翻译结果如下: 处理返回结构时的Go错误处理

huangapple go评论88阅读模式
英文:

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).

huangapple
  • 本文由 发表于 2014年12月5日 20:10:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/27315625.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定