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.
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:
ralat
yang dikembalikan akan mempunyai kaedah Unwrap() []error
.
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)) }
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!