Есть ли возможность получить дополнительные данные из интерфейса err Go? - PullRequest
0 голосов
/ 14 апреля 2020

Я только начинаю работать с golang и обработкой ошибок внутри него. Я работаю с gophercloud SDK и интерфейсом ошибок, реализованным так, что он предоставляет мне все необходимые данные.

Вот мой код:

vol, err := volumes.Get(client, volumeID).Extract()
if err != nil {

    log.Printf("Error with getting volume from gophercloud/openstack: %s\n", err)
    http.Error(w, err.Error(), 404)
    return
}

и вот данные об ошибках, которые я вижу в режиме отладки

enter image description here

Как вы видите на экране, есть действительный код ошибки, есть ли возможность извлечь его из переменной ошибки для использования в методе http.Error ()?

Спасибо.

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать errors.As (GoLang 1.13 + ):

type errorString struct {
    msg  string
    val  string
}

func (e *errorString) Error() string {
    return e.msg
}

func newError(msg, val string) error {
   return &errorString{msg, val}
}

func TestErrorAdditionalInfo(t *testing.T) {
   err := newError("MSG", "SOME_VAL")

   var es *errorString
   if errors.As(err, &es) {
       fmt.Printf("Err[msg: %s; val: %s]\n", es.msg, es.val)
   }
}
...