Любой способ установить xerrors.Caller(1) при выводе ошибки с помощью xerrors.Errorf()?

Запустив приведенный ниже код, трассировка стека выводится с номером строки 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))
}
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вы хотите:

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)
}

Я не решил эту проблему, но теперь я могу переписать свой код обработки ошибок так, как вы дали. Спасибо!

Nigiri 30.10.2019 06:31

Я исследовал трансы стека и наткнулся на ваш вопрос. Это заставило меня заметить, что с пакетом xerrors это возможно с помощью функции Errorf. И тебе спасибо!

Ian 31.10.2019 18:03

Другие вопросы по теме