【发布时间】:2020-03-27 08:26:14
【问题描述】:
type Product struct {
productName string
}
func (p *Product) GetProductName() string {
return p.productName
}
在 Go 中,通常应该如何处理方法的接收者为 nil 并且方法逻辑本身不会产生错误(例如 getter)的情况?
- 别管它,让它恐慌
- 检查 nil,如果为真则返回零值
- 用有意义的消息检查 nil 和恐慌
- 检查 nil 并增强在 nil 时返回错误的方法
- 其他
- 这真的取决于
我倾向于#1,但认为虽然#3 有点冗长,但它可以使调试更容易。 我的想法是调用代码应该测试 nil 并且知道在这种情况下该怎么做。在简单的 getter 方法上返回错误太冗长了。
【问题讨论】:
-
有时接收者的
nil实例是可接受的,如果不是完全“有效”,在这种情况下返回零值,或一些预定义的常量,表示默认值是您应该 做的事情(#2)。在不应该使用nil接收器调用该方法的情况下,让它恐慌(#1)。自定义恐慌消息可能提供的一点清晰性并不能保证额外的 if 语句。通用的invalid memory address or nil pointer dereference消息和堆栈跟踪对于调试来说已经绰绰有余了。