Size: a a a

2020 June 28

~

~ in Go-go!
сонная википедия
сравнивать надо через errors.Is
var err = errors.New("driver_device_not_found")

var (
   unwrapedError = errors.Unwrap(authErrors.ErrDriverDevice)
   result = errors.Is(err, unwrapedError) // true
)

Вопрос: В authErrors есть переменные ошибки. А в err может придти разные типы ошибок. Нужно сравнить err с authErrors.Here_is_error_variable ?
Можете дать идеи пожалуйста ?
источник

с

сонная википедия... in Go-go!
~
var err = errors.New("driver_device_not_found")

var (
   unwrapedError = errors.Unwrap(authErrors.ErrDriverDevice)
   result = errors.Is(err, unwrapedError) // true
)

Вопрос: В authErrors есть переменные ошибки. А в err может придти разные типы ошибок. Нужно сравнить err с authErrors.Here_is_error_variable ?
Можете дать идеи пожалуйста ?
https://t.me/gogolang/444669 хороший пример
источник

~

~ in Go-go!
спасибо
источник

IK

Ilya Kaznacheev in Go-go!
Владимир Столяров
ну я таки начал пользоваться конструкциями вида
switch {
case errors.Is(err, nil):
...
case errors.As(err, &myExtendedErr):
...
case errors.Is(err, someErrValue):
...
}
Поясни мне применение As на практике, пожалуйста
Я реально не догоняю
источник

IK

Ilya Kaznacheev in Go-go!
Is использую с переменными вида sql.NotFound или как она там
источник

IK

Ilya Kaznacheev in Go-go!
А вот As, я как понял, сравнивает именно тип, но при этом сам тип нельзя передать, нужно именно типизированную переменную создавать и с ней сравнивать
источник

ВС

Владимир Столяров... in Go-go!
есть интерфейс вот такого формата
type HTTPCodeError interface {
error

HTTPCode() int
}
реализуемый разными типами внутри проекта
используется примерно так
func SendErrorResponse(rw http.ResponseWriter, r *http.Request, err error) {
var httpCodeError HTTPCodeError
switch {
case errors.As(err, &httpCodeError):
 render.Status(r, httpCodeError.HTTPCode())
 render.JSON(rw, r, ErrorResponse{Error: err.Error()})
default:
 render.Status(r, http.StatusInternalServerError)
 render.JSON(rw, r, ErrorResponse{Error: err.Error()})
}
}
источник

ВС

Владимир Столяров... in Go-go!
собственно можно в этот интерфейс добавить какой-нибудь человекочитаемый текст, какой-то дополнительный код или еще что угодно
источник

~

~ in Go-go!
сонная википедия
сравнивать надо через errors.Is
1) Есть метод GetUserId и выше вне этого метода создал err = errors.New("text"). Теперь если сравнить err с authErrors.ErrDriverDevice , то выдает errors.Is(err, authErrors.ErrDriverDevice) -> true.

2) Если err создать внутри метода GetUserId , а затем сравнить errors.Is(err, authErrors.ErrDriverDevice) -> false.

Почему ??

authErrors -> var( ..... ErrDriverDevice = errors.New("text") )
источник

@

@mr_tron in Go-go!
Sergey Zhdanov
вот тут можно наверно поглядеть https://github.com/gofiber/adaptor/blob/master/main.go
сделал я на базе этого вот такой адаптер https://gist.github.com/e50afe46c4a54ca2a565c2d9f54a249e
но он почему-то не пробрасывает заголовки в ответ. только тело и статус. при этом к моменту вызова w.Write(fctx.Response.Body())
заголовки в w уже записаны нормальные, если дебагером посмотреть что лежит в w.Header()
запускаю вот так
  s := &http.Server{
   Addr:           ":8080",
   Handler:        adaptor.FastHTTPHandlerWrapper(myFasthttpHandler),
   ReadTimeout:    10 * time.Second,
   WriteTimeout:   10 * time.Second,
   MaxHeaderBytes: 1 << 20,
 }
 s.ListenAndServe()
источник

DP

Daniel Podolsky in Go-go!
Ilya Kaznacheev
А вот As, я как понял, сравнивает именно тип, но при этом сам тип нельзя передать, нужно именно типизированную переменную создавать и с ней сравнивать
ну это альтернативный способ строить иерархию ошибок.

в As передают указатель на переменную соответствующего типа (и обычно это указатель на указатель получается)

обычно прямо в вызове As декларируют соответствующую структуру, с пустой инициализацией
источник

IK

Ilya Kaznacheev in Go-go!
Daniel Podolsky
ну это альтернативный способ строить иерархию ошибок.

в As передают указатель на переменную соответствующего типа (и обычно это указатель на указатель получается)

обычно прямо в вызове As декларируют соответствующую структуру, с пустой инициализацией
Вроде как errors.As(err, &MyErrorType{})?
источник

DP

Daniel Podolsky in Go-go!
вот только MyErrorType - указатель, скорее всего, потому, что у метода Error() ресивером, обычно, указатель
источник

@

@mr_tron in Go-go!
@mr_tron
сделал я на базе этого вот такой адаптер https://gist.github.com/e50afe46c4a54ca2a565c2d9f54a249e
но он почему-то не пробрасывает заголовки в ответ. только тело и статус. при этом к моменту вызова w.Write(fctx.Response.Body())
заголовки в w уже записаны нормальные, если дебагером посмотреть что лежит в w.Header()
запускаю вот так
  s := &http.Server{
   Addr:           ":8080",
   Handler:        adaptor.FastHTTPHandlerWrapper(myFasthttpHandler),
   ReadTimeout:    10 * time.Second,
   WriteTimeout:   10 * time.Second,
   MaxHeaderBytes: 1 << 20,
 }
 s.ListenAndServe()
куда ещё можно покопать?
В ответе сервера вместо моего кастомного контент тайпа оказывается плэйн-текст и трансфер-энкодинг chunked вместо указаной длины контента.
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
источник

@

@mr_tron in Go-go!
а. всем спасибо. разобрался. в коде с которого я списывал была бага. WriteHeader нужно вызывать последним после записи тела и простановки заголовков
источник

ЗА

Заур Ашурбеков... in Go-go!
Привет. Никто не в курсе, если прерывается получения файла через формы в multipart в http, Reader этого файла вернёт EOF или ошибку?
источник

ЗА

Заур Ашурбеков... in Go-go!
fasthttp стэк
источник

DP

Daniel Podolsky in Go-go!
@mr_tron
а. всем спасибо. разобрался. в коде с которого я списывал была бага. WriteHeader нужно вызывать последним после записи тела и простановки заголовков
А?!
источник

ЮВ

Юрий Вельмесов... in Go-go!
кто в курсе, с помощью yaml.Unmarshal

можно ли ссылаться на параметры в том же конфиге, ну типа такого:

key1: "value 1"
key2: $key1
источник

VM

Vladislav Milenin in Go-go!
@mr_tron
а. всем спасибо. разобрался. в коде с которого я списывал была бага. WriteHeader нужно вызывать последним после записи тела и простановки заголовков
🤡 ору
а посмотреть как устроен net.http?
источник