Jadual Kandungan
Tentukan jenis ralat tersuai
Gunakan Penegasan Jenis Untuk Mengatasi Kesalahan Khusus
Alternatif: Gunakan errors.Is dan errors.As (GO 1.13)
Tambahkan tingkah laku dengan kaedah
Bilakah menggunakan jenis ralat tersuai
Bonus: Kesalahan Sentinel untuk keadaan yang diketahui
Rumah pembangunan bahagian belakang Golang Cara membuat dan menggunakan jenis ralat tersuai di Go

Cara membuat dan menggunakan jenis ralat tersuai di Go

Aug 11, 2025 pm 11:08 PM
go Ralat pengendalian

Dalam GO, mencipta dan menggunakan jenis ralat tersuai dapat meningkatkan ekspresi dan kebarangkalian pengendalian ralat. Jawapannya adalah untuk membuat ralat tersuai dengan menentukan struktur yang melaksanakan kaedah ralat (). Sebagai contoh, ValidationError mengandungi medan medan dan mesej dan mengembalikan maklumat ralat yang diformat. Maka ralat boleh dikembalikan dalam fungsi, dan jenis ralat tertentu dikesan melalui penegasan jenis atau ralat. Untuk melaksanakan logik yang berbeza. Anda juga boleh menambah kaedah tingkah laku seperti iskritikal kepada kesilapan tersuai, yang sesuai untuk senario yang memerlukan data berstruktur, pemprosesan yang dibezakan, eksport perpustakaan atau integrasi API. Dalam kes -kes yang mudah, kesilapan.new boleh digunakan, dan kesilapan yang telah ditetapkan seperti errnotfound boleh digunakan untuk kesilapan sentinel setanding. Akhirnya, adalah disyorkan untuk menggunakan ralat.as untuk mengendalikan kesilapan membungkus untuk meningkatkan ketahanan. Pelaksanaan kesilapan tersuai yang lengkap memerlukan menggabungkan data, tingkah laku dan mekanisme pengesanan yang betul untuk meningkatkan pemeliharaan program.

Cara membuat dan menggunakan jenis ralat tersuai di GO

Dalam GO, membuat dan menggunakan jenis ralat tersuai memberi anda lebih banyak kawalan ke atas pengendalian ralat, menjadikan kod anda lebih ekspresif dan lebih mudah untuk debug. Walaupun antara muka error terbina dalam GO adalah mudah ( Error() string ), anda boleh menentukan jenis anda sendiri yang memenuhi antara muka ini dan membawa konteks tambahan.

Berikut adalah cara membuat dan menggunakan jenis ralat tersuai dengan berkesan.


Tentukan jenis ralat tersuai

Anda boleh menentukan ralat tersuai dengan membuat struktur yang memegang data yang relevan dan melaksanakan antara muka error .

 Taip validationError struct {
    Rentetan medan
    Rentetan mesej
}

Func (e *validationError) ralat () String {
    kembali fmt.sprintf ("Ralat Pengesahan pada medan %s: %s", e.field, e.message)
}

ValidationError ini termasuk maklumat berstruktur - medan yang gagal pengesahan dan sebabnya - sementara masih menjadi error kerana ia mempunyai kaedah Error() .

Sekarang anda boleh mengembalikan ralat ini dari fungsi:

 Func valateateMail (rentetan e -mel) ralat {
    jika! string.contains (e -mel, "@") {
        kembali & pengesahanError {
            Bidang: "E -mel",
            Mesej: "mesti mengandungi @",
        }
    }
    kembali nih
}

Gunakan Penegasan Jenis Untuk Mengatasi Kesalahan Khusus

Oleh kerana pemanggil menerima error (yang merupakan antara muka), anda perlu menyemak sama ada ia adalah jenis tersuai khusus untuk mengakses medannya.

 Err: = ValateDeMail ("tidak sah")
jika err! = nil {
    jika ve, ok: = err. (*validationError); ok {
        fmt.printf ("medan: %s \ n", ve.field)
        fmt.printf ("Mesej: %s \ n", ve.message)
    } else {
        fmt.println ("Kesalahan tidak diketahui:", err)
    }
}

Ini membolehkan anda bertindak balas secara berbeza berdasarkan jenis ralat - sebagai contoh, mengembalikan kod status HTTP tertentu atau konteks pembalakan.


Alternatif: Gunakan errors.Is dan errors.As (GO 1.13)

Untuk pemeriksaan ralat yang lebih baik, terutamanya dengan kesilapan yang dibungkus, gunakan errors.As bukannya penegasan jenis langsung.

 Err: = ValateDeMail ("tidak sah")
var ve *validationError
jika errors.as (err, & ve) {
    fmt.printf ("Ralat pengesahan yang dikendalikan di medan: %s \ n", ve.field)
}

errors.As berfungsi walaupun ralat tersuai dibungkus dalam ralat lain (contohnya, menggunakan fmt.Errorf("wrapping: %w", err) ), menjadikannya lebih mantap daripada penegasan jenis langsung.


Tambahkan tingkah laku dengan kaedah

Anda boleh memberikan jenis ralat tersuai anda kaedah tambahan untuk tingkah laku yang lebih kaya.

 func (e *validationError) iscritical () bool {
    kembali e.field == "id" || e.field == "E -mel"
}

Kemudian gunakannya dalam logik:

 jika ve, ok: = err. (*validationError); ok && ve.iscritical () {
    log.fatal ("Kegagalan Pengesahan Kritikal")
}

Bilakah menggunakan jenis ralat tersuai

  • Anda memerlukan data berstruktur dalam kesilapan (misalnya, kod, medan, timestamp).
  • Anda mahu mencetuskan logik pemulihan yang berbeza berdasarkan jenis ralat.
  • Anda membina perpustakaan dan mahu pengguna membezakan jenis ralat secara pemrograman.
  • Integrasi dengan API di mana butiran ralat tertentu mesti dikembalikan (contohnya, respons JSON dalam pengendali HTTP).

Untuk kes mudah, errors.New atau fmt.Errorf mungkin mencukupi. Tetapi apabila kesilapan menjadi sebahagian daripada logik program anda, jenis tersuai adalah alat yang betul.


Bonus: Kesalahan Sentinel untuk keadaan yang diketahui

Kadang -kadang anda tidak memerlukan struktur penuh - hanya nilai ralat yang dinamakan.

 var errnotfound = errors.new ("item tidak dijumpai")

Ini berguna sebagai kesilapan yang boleh diramal, setanding:

 jika err == errnotfound {
    // Mengendalikan item yang hilang
}

Tetapi mereka tidak membawa data tambahan. Gabungkan dengan jenis tersuai apabila lebih banyak konteks diperlukan.


Mewujudkan kesilapan tersuai di GO adalah mudah: Tentukan jenis dengan data dan kaedah Error() . Gunakan errors.As untuk memeriksa mereka dengan selamat, dan mereka bentuknya untuk menyokong keperluan pengendalian ralat aplikasi anda. Ia tidak kompleks, tetapi ia membuat perbezaan besar dalam penyelenggaraan.

Atas ialah kandungan terperinci Cara membuat dan menggunakan jenis ralat tersuai di Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
1 bulan yang lalu By 百草
Mengulas kod dalam php
4 minggu yang lalu By 百草
Petua untuk menulis komen php
4 minggu yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1510
276
Apakah beberapa amalan terbaik untuk log masuk? Apakah beberapa amalan terbaik untuk log masuk? Aug 04, 2025 pm 04:48 PM

Menggunakan pembalakan berstruktur, menambahkan konteks, mengawal tahap log, mengelakkan data sensitif pembalakan, menggunakan nama medan yang konsisten, kesilapan pembalakan dengan betul, mengambil kira prestasi, memantau log dan menyatukan konfigurasi adalah amalan terbaik untuk mencapai pembalakan yang cekap. Pertama, log berstruktur dalam format JSON (seperti menggunakan uber-go/zap atau rs/zerolog) memudahkan parsing mesin dan mengintegrasikan rusa, datadog dan alat lain; Kedua, kebolehpercayaan log dipertingkatkan dengan meminta maklumat konteks seperti ID dan ID pengguna, dan boleh disuntik melalui konteks.context atau middleware HTTP; Ketiga, gunakan debug, info, memberi amaran, tahap ralat yang munasabah, dan beroperasi melalui pembolehubah persekitaran.

Cara Mendapatkan Masa Semasa Pergi Cara Mendapatkan Masa Semasa Pergi Aug 06, 2025 am 11:28 AM

UseTime.now () togetTheCurrentLocalTimeasatime.TimeObject; 2.FormatTheTimeSingTheFormatMethodWithlayoutsike "2006-01-0215: 04:05 "; 3.GetutTimeByCallingUtc () ontheresulttime.now (); 4.ExtractComponentsLikeyear, bulan, dayingingMethodssuchasyear (), m

Cara menghuraikan data XML di GO Cara menghuraikan data XML di GO Aug 05, 2025 pm 07:24 PM

Data Parsing XML sangat mudah di GO, hanya gunakan pakej pengekodan terbina dalam/XML. 1. Tentukan struktur dengan tag XML untuk memetakan elemen dan atribut XML, seperti XML: "Nama" Unsur Kanak -kanak yang Bersama, XML: "Hubungi> E -mel" mengendalikan NESTING, XML: "ID, ATTR" membaca atribut; 2. Gunakan xml.unmarshal untuk menghuraikan rentetan XML ke dalam struktur; 3. Untuk fail, gunakan OS.Open untuk membukanya dan menyahkod mereka melalui XML.NewDecoder, yang sesuai untuk pemprosesan aliran fail besar; 4. Semasa memproses elemen pendua, dalam struktur

Bagaimana cara mematikan perkhidmatan yang anggun? Bagaimana cara mematikan perkhidmatan yang anggun? Aug 05, 2025 pm 08:21 PM

Usesignal.Notify()tolistenforSIGINT/SIGTERMandtriggershutdown;2.RuntheHTTPserverinagoroutineandblockuntilasignalisreceived;3.Callserver.Shutdown()withacontexttimeouttostopacceptingnewrequestsandallowin-flightonestocomplete;4.Propagatetheshutdownconte

Bagaimanakah jenis melaksanakan antara muka di GO? Bagaimanakah jenis melaksanakan antara muka di GO? Aug 03, 2025 pm 03:19 PM

Ingo, atypeimplementsanInterfaceImplicitlybyprovidingallRequiredMethodSwithoutExplicitDeclaration.1.interfacesaresatisfiedautomaticallyWenatypehasmethodsmatchingheintheinteintheinteintheinteintheinteintheinteintheinteintheinteintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheintheinterface

Cara membuat dan menggunakan jenis ralat tersuai di Go Cara membuat dan menggunakan jenis ralat tersuai di Go Aug 11, 2025 pm 11:08 PM

Dalam GO, mencipta dan menggunakan jenis ralat tersuai dapat meningkatkan ekspresi dan kebarangkalian pengendalian ralat. Jawapannya adalah untuk membuat ralat tersuai dengan menentukan struktur yang melaksanakan kaedah ralat (). Sebagai contoh, ValidationError mengandungi medan medan dan mesej dan mengembalikan maklumat ralat yang diformat. Kesalahan itu kemudiannya boleh dikembalikan dalam fungsi, mengesan jenis ralat tertentu melalui penegasan jenis atau ralat. Untuk melaksanakan logik yang berbeza. Anda juga boleh menambah kaedah tingkah laku seperti iskritikal kepada kesilapan tersuai, yang sesuai untuk senario yang memerlukan data berstruktur, pemprosesan yang dibezakan, eksport perpustakaan atau integrasi API. Dalam kes -kes yang mudah, kesilapan. Kesalahan, dan kesilapan yang telah ditetapkan seperti errnotfound boleh digunakan untuk sebanding

Bagaimana anda profil pergi kod untuk prestasi? Bagaimana anda profil pergi kod untuk prestasi? Aug 05, 2025 am 08:50 AM

Analisis prestasi kod GO boleh dilaksanakan melalui alat PPROF terbina dalam. Pertama, import titik akhir debug untuk membolehkan \ _ "net/http/pprof"; 1. Untuk perkhidmatan HTTP, mulakan antara muka PPROF localhost: 6060 dalam program; 2. Gunakan gotoolpprof http: // localhost: 6060/debug/pprof/profil? Seconds = 30 untuk mengumpul data prestasi CPU 30 saat; 3. Menganalisis peruntukan memori melalui gotoolpprof http: // localhost: 6060/debug/pprof/heap; 4. Dayakan Run

Membina API tanpa pelayan dengan fungsi GO dan awan Membina API tanpa pelayan dengan fungsi GO dan awan Aug 05, 2025 pm 01:21 PM

Untuk membina API tanpa pelayan, anda perlu menyediakan persekitaran GO dan memasang GoogleCloudsdk, kemudian tulis fungsi HTTP untuk mengendalikan permintaan, dan akhirnya digunakan ke CloudFunctions melalui GCloudcli. 1. Pasang Go1.18 dan Googlecloudsdk dan konfigurasikan projek; 2. Buat modul GO dan tulis fungsi pemprosesan HTTP, sokongan mendapatkan dan post, memproses input JSON dan tindak balas pulangan; 3. Memudahkan kod dan hanya mengekalkan fungsi pengendali, keluarkan logik pelayan tempatan; 4. Gunakan perintah gCloud untuk menggunakan fungsi, tentukan kaedah runtime, entry point dan pencetus; 5. Uji antara muka API Get dan Post, sahkan pulangan

See all articles