如何使用Nil Receiver处理方法


type Product struct {
productName string
}
func (p *Product) GetProductName() string {
return p.productName
}

在Go中,通常应该如何处理方法上的接收器为零并且方法逻辑本身不产生错误(例如getter(的情况?

  1. 不要处理它,让它恐慌
  2. 检查零,如果为true则返回零值
  3. 检查零,并用有意义的信息恐慌
  4. 检查nil并增强在nil上返回错误的方法
  5. 其他
  6. 这真的取决于

我倾向于#1,但我认为虽然#3有点冗长,但它可以使调试更容易。我的想法是,调用代码应该测试nil,并知道在这种情况下该怎么做。在简单的getter方法上返回错误太过冗长。

不要处理它,让它恐慌

您可以在go标准库中看到示例。例如,在net/http包中,有以下内容:

func (c *Client) Do(req *Request) (*Response, error) {
return c.do(req)
}

encoding/json的另一个例子:

// Buffered returns a reader of the data remaining in the Decoder's
// buffer. The reader is valid until the next call to Decode.
func (dec *Decoder) Buffered() io.Reader {
return bytes.NewReader(dec.buf[dec.scanp:])
}

相关内容

  • 没有找到相关文章