猿问

返回可选值和错误

返回可选值和可能错误的函数的最佳签名是什么?


例如:


func findColor(name string) (RGB, error) {

    ...

}

(空的 RGB 值是黑色,一种有效的颜色,因此您不能用它来推断未找到值。假设错误可能来自数据库连接之类的东西。)


看起来最好的两个选项是布尔返回值:


func findColor(name string) (RGB, bool, error) {

    ...

}


c, ok, err := findColor(myname)


if !ok {

    ...

} else if err != nil {

    ...

}


...

或者一个特殊的错误值:


var ColorNotFound = errors.New(...)


func findColor(name string) (RGB, error) {

    ...

}


c, err := findColor(...)


if err == ColorNotFound {

    ...

} else if err != nil {

    ...

}


...

(犯特殊错误似乎很痛苦。)


最惯用的方法是什么?


小唯快跑啊
浏览 174回答 2
2回答

湖上湖

您可以findColor返回*RGB然后将其与 nil 进行比较:c, err := findColor(name)if err != nil { /* Handle error. */ }if c == nil { /* Handle no color. */ }但是这是不安全的,因为如果您尝试在nil指针上调用方法,它们可能会导致恐慌。我建议坚持一种特殊的ErrColorNotFound方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答