Как справиться с методом с Nil Receiver? - PullRequest
0 голосов
/ 27 марта 2020
type Product struct {
    productName string
}

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

В Go как обычно следует обращаться со сценарием, в котором получатель метода равен нулю, а сам метод logi c не выдает ошибки (например, получатель)?

  1. Не обрабатывайте это, позвольте этому pani c
  2. Проверьте на ноль и верните нулевое значение, если истина
  3. Проверьте на ноль и пани c со значимым сообщением
  4. Проверьте на ноль и улучшите метод для возврата ошибки на ноль
  5. Другое
  6. Это действительно зависит

Я склоняюсь к # 1, но думаю, что пока # 3 немного многословно, это может облегчить отладку. Я думаю, что вызывающий код должен проверять ноль и знать, что делать в таком сценарии. То, что возвращать ошибку в простом методе получения, слишком многословно.

1 Ответ

0 голосов
/ 27 марта 2020

Не справляйтесь, пусть панирует c

Примеры можно увидеть в стандартной библиотеке 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:])
}
...