Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengendalikan berbilang ralat serentak di Golang?

Bagaimana untuk mengendalikan berbilang ralat serentak di Golang?

王林
王林asal
2024-06-05 22:47:00776semak imbas

Cara untuk mengendalikan berbilang ralat serentak dalam Go ialah menggunakan ralat. Ialah untuk menyemak sama ada ralat itu adalah ralat asas ralat lain. Gunakan ralat. Untuk menghantar ralat kepada jenis tertentu jika boleh. Gunakan errors.MultiError untuk mencipta objek ErrorGroup yang mengandungi berbilang ralat. Lelaran ke atas ErrorGroup, melakukan tindakan khusus untuk setiap jenis ralat.

如何在 Golang 中同时处理多个错误?

Bagaimana untuk mengendalikan berbilang ralat serentak di Golang?

Mengendalikan berbilang ralat secara serentak di Golang dicapai dengan menggunakan fungsi errors.Is dan errors.As. errors.Is menyemak sama ada ralat adalah ralat asas bagi ralat lain, manakala errors.As memaksa ralat kepada jenis lain dan mengembalikan benar jika penukaran berjaya salah. errors.Iserrors.As函数来实现的。errors.Is检查一个错误是否为另一个错误的底层错误,而errors.As将一个错误强制转换为另一个类型,如果转换成功则返回true,否则返回false。

用法:

  1. 确定是否为底层错误

    var err error
    
    // 检查 err 是否为 os.ErrNotExist 的底层错误
    if errors.Is(err, os.ErrNotExist) {
        // 处理 os.ErrNotExist 错误
    }
  2. 强制转换为特定类型

    if errors.As(err, &someError) {
        // err 可以转换为 someError 类型
    }

实战案例:

假设有一个函数需要调用多个外部函数,每个函数都可能返回一个错误。为了同时处理所有这些错误,可以在函数中使用errors.MultiError创建multiError,然后调用各个函数并将返回的错误添加到multiError中。

import "golang.org/x/xerrors"

func main() {
    // 创建 MultiError
    multiError := errors.MultiError(nil)

    // 调用外部函数并添加错误
    err := f1()
    if err != nil {
        multiError = multiError.Append(err)
    }
    err = f2()
    if err != nil {
        multiError = multiError.Append(err)
    }

    // 处理 MultiError
    if multiError != nil {
        switch {
        case errors.Is(multiError, os.ErrNotExist):
            // 处理 os.ErrNotExist 错误
        case errors.Is(multiError, someError):
            // 处理 someError 错误
        default:
            // 处理其他错误
        }
    }
}

func f1() error {
    return os.Open("no-such-file")
}

func f2() error {
    return someError{err: "some error"}
}

// 自定义错误类型
type someError struct {
    err string
}

func (e someError) Error() string {
    return e.err
}

通过使用errors.MultiErrorerrors.Is/errors.As

🎜Penggunaan: 🎜🎜
  1. 🎜🎜 Tentukan sama ada ia adalah ralat asas 🎜🎜rrreee
  2. 🎜🎜 Paksa penukaran kepada jenis tertentu🎜🎜rrreee
🎜🎜 Kes praktikal: 🎜🎜🎜Andaikan terdapat fungsi yang perlu memanggil berbilang fungsi luaran, dan setiap fungsi mungkin mengembalikan ralat. Untuk mengendalikan semua ralat ini pada masa yang sama, anda boleh mencipta multiError menggunakan errors.MultiError dalam fungsi, kemudian panggil fungsi individu dan tambah ralat yang dikembalikan pada multiError >Medium. 🎜rrreee🎜 Berbilang ralat boleh dikendalikan dengan mudah serentak di Golang dengan menggunakan fungsi errors.MultiError dan errors.Is/errors.As . 🎜

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan berbilang ralat serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn