Запустив приведенный ниже код, трассировка стека выводится с номером строки fmt.Print(...)
. Но я хочу вывести строку logError(err)
. Я думаю, что мне нужно вызвать xerrors.Caller(1)
, чтобы сделать это, но я не знаю, как это сделать. Помоги мне.
import (
"fmt"
"io/ioutil"
"golang.org/x/xerrors"
)
func main() {
_, err := ioutil.ReadFile("")
if err != nil {
logError(err)
return
}
}
func logError(err error) {
fmt.Printf("%+v", xerrors.Errorf(": %w", err))
}
Я думаю, что вы хотите:
import (
"fmt"
"io/ioutil"
"golang.org/x/xerrors"
)
func doWhatever() error {
_, err := ioutil.ReadFile("")
if err != nil {
return xerrors.Errorf("failed doing whatever: %w", err)
}
return nil
}
func main() {
err := doWhatever()
if err != nil {
logError(err)
return
}
}
func logError(err error) {
fmt.Printf("%+v", err)
}
Я исследовал трансы стека и наткнулся на ваш вопрос. Это заставило меня заметить, что с пакетом xerrors
это возможно с помощью функции Errorf
. И тебе спасибо!
Я не решил эту проблему, но теперь я могу переписать свой код обработки ошибок так, как вы дали. Спасибо!