Bagaimana untuk mengira ralat sambungan dalam Go 1.20?

WBOY
Lepaskan: 2024-02-11 18:57:08
ke hadapan
906 orang telah melayarinya

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
}
Salin selepas log masuk

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))
}
Salin selepas log masuk
🎜Ini akan menghasilkan (cuba di 🎜Go Playground🎜): 🎜
Number of joined errors: 2
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!