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在同一文档中说,返回错误而不是零是一种好的方式。您链接到的示例位于错误部分之前。也许作者忽略了错误处理,因为后面将讨论这个主题。