170 похожих чатов

Ребят, добрый день! Я же ничего не путаю: когда мы

врапаем ошибку через fmt.Errorf, стек трейса там не оказывается, верно? Надо использовать для этого github.com/pkg/errors

17 ответов

26 просмотров

еще есть https://pkg.go.dev/golang.org/x/xerrors

да, там нет стектрейса, и не будет 🙁 я дошел до того, что добавляю на каждом уровне строку, чтобы понять, откуд file not found лезет

Alexey-Popov Автор вопроса
Daniel Podolsky
да, там нет стектрейса, и не будет 🙁 я дошел до т...

Вариант, но проще, все же, врапнуть ошибку, я думаю

Alexey Popov
Вариант, но проще, все же, врапнуть ошибку, я дума...

так я враппингом стандартным и добавляю

Andrey Burov
покажите пример плиз

``` package errwithplace import ( "fmt" "runtime" "github.com/jpillora/longestcommon" ) var myPlace = getCaller(-1) func getCaller(skip int) string { funcName := "UNKNOWN" pc, f, l, ok := runtime.Caller(skip + 1) if ok { funcName = runtime.FuncForPC(pc).Name() } _, _, _, _ = pc, f, l, funcName return fmt.Sprintf("%s:%d", f, l) //return funcName } func getCallerShort(skip int) string { names := []string{ getCaller(skip + 1), myPlace, } longestcommon.TrimPrefix(names) return names[0] } func Wrap(err error) error { if err != nil { return fmt.Errorf("%q: %w", getCallerShort(1), err) } return nil } ```

добрый, трейса нет, но если возвращать неповторяющиеся строки в каждом фрагменте кода, то по сути это некий аналог трейса. return fmt.Errorf("this is unique string returned only here 1: %w", err) на выходе имеем что-то типа "this is unique string returned only here 1: this is unique string returned only here 2: original error" чем не трейс? Похоже это то, что @onokonem описал

Elmanov Anton
добрый, трейса нет, но если возвращать неповторяющ...

тем что оно обычно не включает в себя строки в исходниках и имя функции

c
тем что оно обычно не включает в себя строки в исх...

строка перед ": %w" должна быть уникальной, тогда вам понятно, какая это функция.

Elmanov Anton
строка перед ": %w" должна быть уникальной, тогда ...

не должна она быть уникальной, она должна описывать ошибку и ее контекст

Andrey Burov
ИМХО так себе затея...

сейчас имею проект с таким подходом и гугл стек - в принципе сразу определяю весь стек по логу

c
не должна она быть уникальной, она должна описыват...

https://github.com/uber-go/guide/blob/master/style.md#error-wrapping собственно

Elmanov Anton
сейчас имею проект с таким подходом и гугл стек - ...

получив ошибку "lalablabla123: file not found" как искать и как понять о чем это вообще и где искать?

c
не должна она быть уникальной, она должна описыват...

похоже у нас с вами трудности понимания. приведу пример. у нас одна функция вызывается из двух других. На выходе у нас будет ошибка failed to a from b: failed to request 3rd party: some err или failed to a from с: failed to request 3rd party: some err Ведь понятен же стек? Причем сделать сообщения разными не составляет труда - это разные функции и давать они должны разный текст ошибки. Если у вас в коде разные функции пишут одинаковые логи - это надо исправлять пока не поздно (потом закопаетесь совсем). Собственно код: func a () error { // err := ... some 3rd party request return fmt.Errorf("failed to request 3rd party: $w", err ) } func b () error { if err := a(); err != nil { return fmt.Errorf("failed to a from b: %w", err ) } return nil } func c () error { if err := a(); err != nil { return fmt.Errorf("failed to a from c: %w", err ) } return nil }

Andrey Burov
получив ошибку "lalablabla123: file not found" как...

искать код, который пишет lalablabla123.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта