Rumah pembangunan bahagian belakang Golang Ralat pengendalian di Golang: Bagaimana untuk memaparkan maklumat tindanan panggilan?

Ralat pengendalian di Golang: Bagaimana untuk memaparkan maklumat tindanan panggilan?

Aug 07, 2023 am 10:36 AM
golang Ralat pengendalian timbunan panggilan

Ralat pengendalian di Golang: Bagaimana untuk memaparkan maklumat tindanan panggilan?

Di Golang, pengendalian ralat adalah bahagian yang sangat penting. Apabila program kami menghadapi ralat, kami perlu dapat mencari dan menyelesaikan masalah dengan cepat. Dan maklumat timbunan panggilan boleh memberikan petunjuk penting tentang tempat ralat berlaku. Artikel ini akan memperkenalkan cara memaparkan maklumat tindanan panggilan di Golang.

Di Golang, pengendalian ralat biasanya dilakukan dengan mengembalikan nilai ralat. Apabila ralat berlaku semasa pelaksanaan fungsi, kita hanya boleh mengembalikan objek ralat. Walau bagaimanapun, hanya mengembalikan mesej ralat biasanya tidak mencukupi untuk memberikan maklumat yang mencukupi untuk mencari ralat. Kami memerlukan pemanggil untuk dapat menjejaki di mana ralat berlaku supaya masalah itu dapat dikesan dengan lebih baik dan diselesaikan.

Pustaka standard Golang menyediakan pakej ralat terbina dalam untuk mengendalikan ralat. Kita boleh menggunakan fungsi errors.New() untuk mencipta objek ralat mudah. Contohnya:

package main

import (
    "errors"
    "fmt"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
    }
    fmt.Println("Result:", result)
}
Salin selepas log masuk

Dalam contoh di atas, kami mentakrifkan fungsi divide() untuk melaksanakan operasi bahagi dua integer. Jika hujah kedua ialah 0, kami mengembalikan objek ralat yang mewakili "ralat bahagi dengan sifar". divide()函数来执行两个整数的除法操作。如果第二个参数为0,我们返回一个错误对象表示“除零错误”。

在main函数中,我们调用divide()函数来执行除法操作。如果返回值中的错误对象不为nil,则打印错误信息。

这样做虽然可以提供基本的错误信息,但是对于复杂的程序来说并不够。我们需要获得更多关于错误发生位置的信息,以便更好地定位问题。

为了显示调用栈信息,我们可以使用Golang的第三方包github.com/pkg/errors。这个包提供了一些额外的函数来处理错误,并提供了更详细的调用栈信息。

在上面的例子中,我们可以使用pkg/errors来改进错误处理:

package main

import (
    "fmt"

    "github.com/pkg/errors"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.Wrap(errors.New("division by zero"), "divide()")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
        fmt.Printf("%+v
", err) // 打印调用栈信息
    }
    fmt.Println("Result:", result)
}
Salin selepas log masuk

在以上示例中,我们使用errors.Wrap()函数将错误对象包装起来,并添加了当前函数的名字。这样,当我们打印错误信息时,将会显示带有调用栈信息的错误。

在main函数中,我们使用%+v格式化打印错误信息。这将会输出更详细的调用栈信息,包括错误发生的位置。

当我们运行以上示例时,将会得到类似以下的输出:

Error: divide(): division by zero
divide(): division by zero
        main.divide()
        main.main()
        runtime.main()
Salin selepas log masuk

从输出中,我们可以看到错误信息的具体位置。errors.Wrap()函数将错误信息和调用栈信息进行了组合。

使用pkg/errors包还可以更进一步地处理错误,如使用errors.Cause()获取原始错误、使用errors.StackTrace()获取调用栈信息等。这些函数可以帮助我们更好地理解和处理错误。

通过在程序中显示调用栈信息,我们可以更方便地定位和解决问题。特别是在开发复杂的程序或处理大型代码库时,准确的错误定位非常重要。借助Golang的错误处理机制和pkg/errors

Dalam fungsi utama, kami memanggil fungsi divide() untuk melaksanakan operasi bahagi. Jika objek ralat dalam nilai pulangan tidak sifar, mesej ralat dicetak. 🎜🎜Walaupun ini boleh memberikan maklumat ralat asas, ia tidak mencukupi untuk program yang kompleks. Kami perlu mendapatkan lebih banyak maklumat tentang tempat ralat berlaku untuk menyetempatkan masalah dengan lebih baik. 🎜🎜Untuk memaparkan maklumat tindanan panggilan, kami boleh menggunakan pakej pihak ketiga Golang github.com/pkg/errors. Pakej ini menyediakan beberapa fungsi tambahan untuk mengendalikan ralat dan menyediakan maklumat tindanan panggilan yang lebih terperinci. 🎜🎜Dalam contoh di atas, kita boleh menggunakan pkg/errors untuk meningkatkan pengendalian ralat: 🎜rrreee🎜Dalam contoh di atas, kami menggunakan fungsi errors.Wrap() untuk Objek ralat dibalut dan ditambah dengan nama fungsi semasa. Dengan cara ini, apabila kami mencetak mesej ralat, ralat dengan maklumat tindanan panggilan akan dipaparkan. 🎜🎜Dalam fungsi utama, kami menggunakan %+v untuk memformat dan mencetak maklumat ralat. Ini akan mengeluarkan maklumat tindanan panggilan yang lebih terperinci, termasuk tempat ralat berlaku. 🎜🎜Apabila kita menjalankan contoh di atas, kita akan mendapat output yang serupa dengan yang berikut: 🎜rrreee🎜Daripada output, kita boleh melihat lokasi tertentu mesej ralat. Fungsi errors.Wrap() menggabungkan maklumat ralat dan maklumat timbunan panggilan. 🎜🎜Menggunakan pakej pkg/errors boleh mengendalikan lagi ralat, seperti menggunakan errors.Cause() untuk mendapatkan ralat asal dan menggunakan errors.StackTrace( )Dapatkan maklumat tindanan panggilan, dsb. Fungsi ini boleh membantu kami memahami dan mengendalikan ralat dengan lebih baik. 🎜🎜Dengan memaparkan maklumat tindanan panggilan dalam program, kami dapat mencari dan menyelesaikan masalah dengan lebih mudah. Terutama apabila membangunkan program yang kompleks atau bekerja dengan asas kod yang besar, penyetempatan ralat yang tepat adalah sangat penting. Dengan bantuan mekanisme pengendalian ralat Golang dan pakej <code>pkg/errors, kami boleh memaparkan maklumat tindanan panggilan dengan mudah dan memberikan maklumat lokasi ralat yang lebih terperinci untuk mengendalikan pengecualian dengan lebih baik. 🎜

Atas ialah kandungan terperinci Ralat pengendalian di Golang: Bagaimana untuk memaparkan maklumat tindanan panggilan?. 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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan 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)

Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Jun 06, 2024 pm 05:14 PM

Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Jun 06, 2024 am 11:21 AM

Bagaimana untuk mengkonfigurasi pengumpulan sambungan untuk sambungan pangkalan data Go? Gunakan jenis DB dalam pakej pangkalan data/sql untuk membuat sambungan pangkalan data untuk mengawal bilangan maksimum sambungan serentak;

Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Jun 06, 2024 pm 12:37 PM

Perbezaan antara rangka kerja GoLang dan rangka kerja Go ditunjukkan dalam seni bina dalaman dan ciri luaran. Rangka kerja GoLang adalah berdasarkan perpustakaan standard Go dan meluaskan fungsinya, manakala rangka kerja Go terdiri daripada perpustakaan bebas untuk mencapai tujuan tertentu. Rangka kerja GoLang lebih fleksibel dan rangka kerja Go lebih mudah digunakan. Rangka kerja GoLang mempunyai sedikit kelebihan dalam prestasi dan rangka kerja Go lebih berskala. Kes: gin-gonic (rangka Go) digunakan untuk membina REST API, manakala Echo (rangka kerja GoLang) digunakan untuk membina aplikasi web.

Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Jun 06, 2024 am 11:24 AM

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Apakah amalan terbaik untuk pengendalian ralat dalam rangka kerja Golang? Apakah amalan terbaik untuk pengendalian ralat dalam rangka kerja Golang? Jun 05, 2024 pm 10:39 PM

Amalan terbaik: Cipta ralat tersuai menggunakan jenis ralat yang ditakrifkan dengan baik (pakej ralat) Sediakan lebih banyak butiran Log ralat dengan sewajarnya Sebarkan ralat dengan betul dan elakkan menyembunyikan atau menyekat ralat Balut seperti yang diperlukan untuk menambah konteks

Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Jun 06, 2024 am 10:51 AM

Fungsi FindStringSubmatch mencari subrentetan pertama dipadankan dengan ungkapan biasa: fungsi mengembalikan hirisan yang mengandungi subrentetan yang sepadan, dengan elemen pertama ialah keseluruhan rentetan dipadankan dan elemen berikutnya ialah subrentetan individu. Contoh kod: regexp.FindStringSubmatch(teks,corak) mengembalikan sekeping subrentetan yang sepadan. Kes praktikal: Ia boleh digunakan untuk memadankan nama domain dalam alamat e-mel, contohnya: e-mel:="user@example.com", pattern:=@([^\s]+)$ untuk mendapatkan padanan nama domain [1].

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana untuk menyelesaikan masalah keselamatan biasa dalam rangka kerja golang? Bagaimana untuk menyelesaikan masalah keselamatan biasa dalam rangka kerja golang? Jun 05, 2024 pm 10:38 PM

Cara menangani isu keselamatan biasa dalam rangka kerja Go Dengan penggunaan meluas rangka kerja Go dalam pembangunan web, memastikan keselamatannya adalah penting. Berikut ialah panduan praktikal untuk menyelesaikan masalah keselamatan biasa, dengan kod sampel: 1. SQL Injection Gunakan pernyataan yang disediakan atau pertanyaan berparameter untuk mengelakkan serangan suntikan SQL. Contohnya: constquery="SELECT*FROMusersWHEREusername=?"stmt,err:=db.Prepare(query)iferr!=nil{//Handleerror}err=stmt.QueryR

See all articles