Go 应该是";建造商;函数返回错误还是空值?

Go 应该是";建造商;函数返回错误还是空值?,go,Go,给定一个构造函数,如 func NewSomething(name, color string) *Something { s := Something{name, color} return &s } 此函数是否应包括健全性检查,如&name==nil,或len(name)==0?如果此函数应包含健全性检查,则应从构造函数返回什么值?一个nil值,或者一个错误(errors.New(…))?下面是一个例子 func NewSomething(name, color s

给定一个构造函数,如

func NewSomething(name, color string) *Something {
    s := Something{name, color}
    return &s
}
此函数是否应包括健全性检查,如
&name==nil
,或
len(name)==0
?如果此函数应包含健全性检查,则应从构造函数返回什么值?一个
nil
值,或者一个错误(
errors.New(…)
)?下面是一个例子

func NewSomething(name, color string) *Something {
    if &name == nil || len(name) == 0 {
        return nil
    }

    if &color== nil || len(color) == 0 {
        return nil
    }

    s := Something{name, color}
    return &s
}

返回一个
错误
。使用可分辨值(如
nil
)表示错误不是惯用做法

func NewSomething(name, color string) (*Something, error) {
  if name == "" {
    return nil, errors.New("bad name")
  }

  if color == "" {
    return nil, errors.New("bad color")
  }

  s := Something{name, color}
  return &s, nil
}

旁白:表达式
&anyVariable==nil
的计算结果总是
false
。将检查简化为
len(color)==0
color==”

标准数据库中的示例,依此类推。导致我问这个问题的原因是。该示例没有返回错误,而是返回一个
nil
值,因此您可以看到我的混淆。这些示例有助于澄清正确的函数应该是什么样子,在本用例中,谢谢。@battery.cord在同一文档中说,返回错误而不是零是一种好的方式。您链接到的示例位于错误部分之前。也许作者忽略了错误处理,因为后面将讨论这个主题。