返回可选值和可能错误的函数的最佳签名是什么?例如: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 { ...}...(犯特殊错误似乎很痛苦。)最惯用的方法是什么?
2 回答
湖上湖
TA贡献2003条经验 获得超2个赞
您可以findColor返回*RGB然后将其与 nil 进行比较:
c, err := findColor(name)
if err != nil { /* Handle error. */ }
if c == nil { /* Handle no color. */ }
但是这是不安全的,因为如果您尝试在nil指针上调用方法,它们可能会导致恐慌。
我建议坚持一种特殊的ErrColorNotFound方法。
- 2 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消