为了账号安全,请及时绑定邮箱和手机立即绑定

返回可选值和错误

返回可选值和错误

Go
小唯快跑啊 2021-08-30 14:45:53
返回可选值和可能错误的函数的最佳签名是什么?例如: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方法。


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信