Любой способ установить 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))
}
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
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

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