给定一个构造函数,例如
func NewSomething(name, color string) *Something { s := Something{name, color} return &s }
此功能是否应包括健全性检查,例如&name == nil或len(name) == 0?如果此函数应包含完整性检查,则构造函数应返回什么值?甲nil值,或错误(errors.New(...))?下面包括一个示例。
&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 }
返回error。使用可分辨的值(例如nil)来指示错误不是惯用的。
error
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 == ""。
&anyVariable == nil
false
len(color) == 0
color == ""