Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengira ralat sambungan dalam Go 1.20?

Bagaimana untuk mengira ralat sambungan dalam Go 1.20?

WBOY
WBOYke hadapan
2024-02-11 18:57:08920semak imbas

Go 1.20 中如何计算连接错误?

PHP Editor Apple membawakan anda pengenalan tentang cara mengira ralat sambungan dalam versi Go 1.20. Dalam versi baharu, bahasa Go menyediakan kaedah pengiraan ralat sambungan yang lebih tepat, yang boleh memantau dan mengendalikan anomali sambungan rangkaian dengan lebih baik. Melalui pengiraan tepat ralat sambungan, pembangun boleh mencari dan menyelesaikan masalah sambungan rangkaian dengan lebih cepat, meningkatkan kestabilan dan prestasi program. Artikel ini akan memperkenalkan secara terperinci prinsip dan penggunaan pengiraan ralat sambungan dalam versi Go 1.20 untuk membantu pembangun menangani anomali sambungan rangkaian dengan lebih baik.

Kandungan soalan

Seperti yang saya fahami, errors.Join() ialah penggantian luar kotak untuk jenis koleksi berbilang ralat seperti hashcorp/multierror , yang mengumpul ralat yang berlaku secara selari. Isu ini tidak menyelesaikan ralat umum dalam membungkus/membuka.

Apabila saya menggantikan kod pengeluaran, beberapa ujian gagal semasa cuba mengira ralat sambungan. Kedua-dua bilangan dan jenis ralat adalah penting dalam menguruskan kes perniagaan. Ini berfungsi untuk hashcorp/multierror kerana rentetan tertentu dijana seperti 3 错误发生.

package main

import "errors"

func doSomething() error {
    var multierror error
    err1 := errors.New("Hello")
    multierror = errors.Join(err1, err1)
    err2 := errors.New("World")
    multierror = errors.Join(err2, err1)

    return multierror
}

// somewhere else
func test_doSomething(t *testing.T) {
   actual := doSomething()
   assert.Len(t, 2, len(actual)????) // help
}

Bagaimana untuk mengira bilangan ralat selepas menggunakan errors.Join()?

Saya tidak dapat mencari cara untuk menyemak sifat kepingan ralat dalam ralat sambungan, dan menyemak hirisan ralat itu sendiri adalah mustahil kerana ia bersifat peribadi.

Menggunakan errors.Unwrap(err) mungkin satu cara, walaupun yang saya dapat hanyalah ralat atau nil (jika yang terakhir). Kecuali untuk errors.As/.Is, yang tidak membenarkan kami menyelesaikan ralat pengiraan. errors.Unwrap(err) 可能是一种方法,尽管我得到的只是一个错误或 nil (如果它是最后一个)。除了 errors.As/.Is 之外,它并不完全让我们解决计数错误。

解决方法

errors.Join()Penyelesaian

errors.Join() 返回的 error 将有一个 Unwrap() []error Rekod:

Jadi

ralat yang dikembalikan akan mempunyai kaedah Unwrap() []error.

Type Assertion

Memegang jenis antara muka kaedah ini, anda boleh memanggilnya dan ia akan mengembalikan ralat hirisan yang disambungkan: Contohnya:

err1 := errors.New("err1")
err2 := errors.New("err2")
err := errors.Join(err1, err2)

if uw, ok := err.(interface{ Unwrap() []error }); ok {
    errs := uw.Unwrap()
    fmt.Println("Number of joined errors:", len(errs))
}
🎜Ini akan menghasilkan (cuba di 🎜Go Playground🎜): 🎜
Number of joined errors: 2

Atas ialah kandungan terperinci Bagaimana untuk mengira ralat sambungan dalam Go 1.20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam