Почему указатель должен быть возвращен, когда тип возврата на самом деле является ошибкой?

Я читаю статью " Обработка ошибок" и "Го", и не совсем понимаю, почему нужно возвращать указатель (&errorString{text}), когда тип возврата на самом деле является error?

Мое понимание - это error, это интерфейс, а errorString реализует интерфейс, поэтому return errorString также в порядке (но это не так).

// New returns an error that formats as the given text.
func New(text string) error {
 return &errorString{text}
}

реализация errorString

// errorString is a trivial implementation of error.
type errorString struct {
 s string
}

func (e *errorString) Error() string {
 return e.s
}
1 ответ

Так как интерфейс error для errorString реализован для указателя (func (e *errorString) Error()), если он был реализован, как func (e *errorString) Error() ниже, вы сразу возвращаете значение:

func (e errorString) Error() string {
 return e.s
}

licensed under cc by-sa 3.0 with attribution.