Rumah pembangunan bahagian belakang Golang Mari kita bincangkan tentang mekanisme pengelogan ralat biasa di Golang

Mari kita bincangkan tentang mekanisme pengelogan ralat biasa di Golang

Apr 23, 2023 am 10:08 AM

Sebagai bahasa yang sentiasa berkembang, Golang sentiasa memperkenalkan ciri baharu dan menambah lebih banyak perpustakaan, menjadikannya pilihan terbaik untuk pembangunan moden. Walau bagaimanapun, walaupun kod terbaik boleh mempunyai ralat.

Bagi pembangun Golang, log ralat ialah alat yang sangat penting. Ia membolehkan anda mengenal pasti ralat dengan cepat dan membetulkannya, menjadikan aplikasi anda lebih mantap dan boleh dipercayai. Walau bagaimanapun, untuk menggunakan log ralat dengan betul, anda perlu tahu cara membuat, log dan nyahpepijatnya.

Artikel ini akan memperkenalkan mekanisme pengelogan ralat biasa di Golang, termasuk pengendalian ralat asas, mekanisme panik/tangguh, log perpustakaan standard dan perpustakaan log pihak ketiga, serta beberapa amalan terbaik dan kemahiran nyahpepijat.

  1. Pengendalian ralat asas
    Mekanisme pengendalian ralat asas di Golang ialah menggunakan jenis ralat. Ia adalah antara muka yang telah ditetapkan yang digunakan untuk mewakili maklumat ralat yang dikembalikan oleh fungsi atau kaedah tertentu. Jika nilai pulangan fungsi atau kaedah mengandungi nilai ralat jenis, ini bermakna operasi mungkin telah gagal. Anda boleh menggunakan pernyataan if atau menukar pernyataan untuk menyemak nilai ralat dan mengambil tindakan yang sesuai. Contohnya:

func openFile(rentetan nama fail) {

file, err := os.Open(filename)
if err != nil {
    return err
}
defer file.Close()

return nil
Salin selepas log masuk

}

Dalam kod di atas, fungsi openFile membuka fail dan mengembalikan jenis nilai ralat. Jika fail tidak boleh dibuka, ia akan mengembalikan nilai ralat bukan sifar. Dalam program utama anda boleh menyemak nilai ralat yang dikembalikan dan mengambil tindakan yang sesuai:

err := openFile("input.txt")
if err != nil {

log.Fatal(err)
Salin selepas log masuk
Salin selepas log masuk

}

Dalam kes ini, fungsi utama memanggil fungsi openFile dan menyemak ralat yang dikembalikan. Jika ralat berlaku, ia mencetak mesej ralat dan keluar dari program.

  1. Mekanisme panik/Tangguhkan
    Terdapat mekanisme khas dalam Golang yang boleh digunakan apabila ralat maut berlaku dalam program: mekanisme panik/tunda. Apabila program mengalami ralat yang tidak boleh dikendalikan, ia boleh memanggil fungsi panik untuk menimbulkan pengecualian panik, yang akan mengganggu pelaksanaan fungsi semasa dan dinaikkan timbunan panggilan sehingga ia ditangkap dengan betul atau program keluar. Biasanya, anda tidak sepatutnya memanggil fungsi panik secara langsung. Sebaliknya, anda harus menggunakan mekanisme penangguhan untuk menangkap pengecualian dan melakukan beberapa operasi pembersihan, seperti menutup fail, membebaskan memori, dsb. Contohnya:

func openFile(rentetan nama fail) {

file, err := os.Open(filename)
if err != nil {
    panic(err)
}
defer file.Close()

// ... code that uses the file ...
Salin selepas log masuk

}

Dalam coretan kod di atas, fungsi openFile cuba membuka fail. Jika pembukaan gagal, ia akan menimbulkan pengecualian panik. Ia kemudian menggunakan pernyataan tangguh untuk memastikan fail ditutup. Dalam fungsi utama yang sepadan, anda boleh menulis pernyataan pulih untuk menangkap pengecualian dan melaksanakan operasi pembersihan:

func main() {

defer func() {
    if r := recover(); r != nil {
        log.Println("Recovered from panic:", r)
    }
}()

openFile("input.txt")
Salin selepas log masuk

}

di sini Dalam kes ini, fungsi utama menggunakan pernyataan tangguh untuk memastikan ralat ditangkap dalam apa jua keadaan. Jika fungsi openFile menimbulkan pengecualian, pernyataan pulih akan dilaksanakan dan mesej ralat akan dicetak.

  1. Log perpustakaan standard
    Pustaka standard Golang mengandungi sistem pengelogan yang sangat asas: pakej log. Ia mempunyai tiga fungsi output: Print, Printf dan Println. Mereka berfungsi dengan cara yang sama, mereka hanya memformat rentetan secara berbeza. Contohnya:

log.Print("Hello, world!")
log.Printf("Hello, %s!", "world")
log.Println(" Hello ", "world")

Fungsi ini mengeluarkan teks kepada output standard. Jika anda perlu menulis fail log pada fail dan bukannya konsol, gunakan log.SetOutput:

f, err := os.Create("logfile")
if err != nil {

log.Fatal(err)
Salin selepas log masuk
Salin selepas log masuk

}
tunda f.Close()
log.SetOutput(f)

Ini akan mencipta fail bernama logfile dan menulis semua output log pada dokumen itu.

Pakej log Golang juga menyediakan beberapa fungsi lain, seperti membina pembalak tersuai dan menetapkan tahap log, dsb. Lihat dokumentasi rasmi untuk butiran.

  1. Perpustakaan pembalakan pihak ketiga
    Terdapat banyak perpustakaan pembalakan pihak ketiga yang sangat baik dalam komuniti Golang, seperti logrus, zap, zerolog, dsb. Pustaka ini menyediakan lebih banyak ciri dan pilihan seperti pengelogan berstruktur, berbilang output, tahap log boleh disesuaikan dan kawalan medan, dan banyak lagi. Berikut ialah contoh kod menggunakan pustaka logrus:

log import "github.com/sirupsen/logrus"

func main() {

log.SetFormatter(&log.JSONFormatter{})
log.SetLevel(log.WarnLevel)

log.WithFields(log.Fields{
    "animal": "walrus",
    "size":   10,
}).Info("A group of walrus emerges from the ocean")
Salin selepas log masuk

}

Dalam contoh ini, kami menggunakan perpustakaan logrus dan pemformatan JSON. Kemudian kami menetapkan tahap ralat kepada amaran, dan kemudian kami menggunakan kemasukan log logrus, kami menyediakan beberapa medan, dan kami merekodkan mesej bahawa sekumpulan walrus muncul dari lautan.

  1. Petua Nyahpepijat
    Semasa menulis kod, mencari dan membetulkan ralat sentiasa mengambil masa. Berikut ialah beberapa petua penyahpepijatan berguna yang boleh membantu anda menyelesaikan masalah dengan lebih cepat.
  2. Gunakan fmt.Printf untuk mencetak nilai perantaraan.

Apabila anda mendapati bahawa output kod anda tidak seperti yang anda harapkan, anda boleh menggunakan fmt.Printf untuk cuba mengenal pasti masalah. Contohnya:

func foo() {

for i := 0; i < 10; i++ {
    fmt.Printf("%d\n", i)
}
Salin selepas log masuk

}

Dalam kes ini, fungsi foo akan mengeluarkan nombor yang dipilih dalam setiap lelaran gelung , dengan itu membantu kami mengenal pasti masalah.

  1. 使用log.Println或log.Printf记录哪一步失败了。

在某些情况下,您的代码可能会因多个原因之一而失败。使用log.Println或log.Printf来记录当前执行的代码行可以帮助您定位错误。例如:

func openFile(filename string) error {

log.Printf("Trying to open file %s", filename)
file, err := os.Open(filename)
if err != nil {
    log.Printf("Failed to open file %s: %s", filename, err)
    return err
}
defer file.Close()

return nil
Salin selepas log masuk

}

在这种情况下,函数openFile在尝试打开文件之前记录了它正在尝试打开的文件名。如果出现错误,它还将记录哪个文件无法正常打开。

  1. 使用GDB进行调试。

如果您需要深入调试代码,GDB可能是您需要的工具。它是一个强大的调试器,可以与Golang程序一起使用。例如:

$ go build -gcflags "-N -l" -o myprogram
$ gdb ./myprogram

使用上面的命令编译您的Golang程序和调试器。您还需要添加-gcflags“-N -l”标志以确保GDB可以正确识别调试信息。然后,您可以在GDB命令行中运行程序并在其中设置断点和查看变量等。

总结
对于Golang开发者来说,错误日志是一个非常重要的工具,可以帮助识别和解决问题。本文介绍了Golang中常见的错误日志机制,包括基本的错误处理、panic/defer机制、标准库log和第三方日志库,以及一些最佳实践和调试技巧。无论您是新手还是高级开发人员,正确地使用错误日志机制都是必不可少的。

Atas ialah kandungan terperinci Mari kita bincangkan tentang mekanisme pengelogan ralat biasa di Golang. 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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
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)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

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 anda menentukan kebergantungan dalam fail go.mod anda? Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Mar 27, 2025 pm 07:14 PM

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO? Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO? Mar 21, 2025 pm 06:35 PM

Artikel ini membincangkan menggunakan ujian yang didorong oleh jadual di GO, satu kaedah yang menggunakan jadual kes ujian untuk menguji fungsi dengan pelbagai input dan hasil. Ia menyoroti faedah seperti kebolehbacaan yang lebih baik, penurunan duplikasi, skalabiliti, konsistensi, dan a

See all articles