3
鑑於構造函數如「構造函數」函數應該返回一個錯誤還是一個空值?
func NewSomething(name, color string) *Something {
s := Something{name, color}
return &s
}
如果這種功能包括完整性檢查,如&name == nil
,或len(name) == 0
?如果這個函數應該包含健全性檢查,應該從構造函數返回什麼值? A 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
}
stdlib中的示例:[url.Parse](https://golang.org/pkg/net/url/#Parse),['http.NewRequest'](https://golang.org/pkg/ net/http /#NewRequest)等等。 – JimB
導致我問這個問題的是[這個例子](https://golang.org/doc/effective_go.html#composite_literals)。該示例不會返回錯誤,而是返回一個「nil」值,以便您看到我的困惑。這些例子有助於闡明一個正確的函數應該是什麼樣的,在這個用例中,謝謝。 –
@ battery.cord在同一文檔中的[錯誤部分](https://golang.org/doc/effective_go.html#errors)表示返回錯誤而不是零是很好的樣式。您鏈接的示例出現在錯誤部分之前。也許作者掩蓋了錯誤處理的問題,因爲後面會討論這個話題。 –