Bagaimana untuk Menangguhkan Fungsi dengan Selamat dengan Nilai Pulangan Yang Berpotensi Tidak Ditanda dalam Go?

Susan Sarandon
Lepaskan: 2024-11-02 01:00:30
asal
865 orang telah melayarinya

How to Safely Defer Functions with Potentially Unchecked Return Values in Go?

Mengurus Fungsi Tertunda dengan Nilai Pulangan Tidak Ditanda

Apabila menggunakan gometalinter dan errcheck, pembangun mungkin menghadapi amaran tentang menangguhkan fungsi yang mengembalikan pembolehubah tanpa menyemak untuk kesilapan. Ini biasanya berlaku dalam senario seperti menutup badan permintaan, dengan kaedah Close() mengembalikan nilai ralat.

Untuk menangani isu ini, pendekatan yang disyorkan ialah menangguhkan fungsi lain yang memanggil fungsi asal dan menyemak pengembaliannya. nilai. Ini boleh dicapai menggunakan fungsi tanpa nama, seperti berikut:

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()</code>
Salin selepas log masuk

Penyelesaian alternatif ialah mencipta fungsi pembantu yang melakukan semakan ralat:

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}</code>
Salin selepas log masuk

Fungsi pembantu ini kemudiannya boleh digunakan untuk menangguhkan fungsi asal:

<code class="go">defer Check(r.Body.Close)</code>
Salin selepas log masuk

Untuk pelbagai fungsi tertunda, pembantu yang diubah suai boleh dibuat untuk menerima pelbagai fungsi:

<code class="go">func Checks(fs ...func() error) {
    // Implement error checking and execution logic
}</code>
Salin selepas log masuk

Menggunakan pembantu ini:

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>
Salin selepas log masuk

Gelung ke bawah dalam pembantu Checks() memastikan bahawa fungsi tertunda terakhir dilaksanakan terlebih dahulu, mengekalkan susunan pelaksanaan fungsi tertunda.

Atas ialah kandungan terperinci Bagaimana untuk Menangguhkan Fungsi dengan Selamat dengan Nilai Pulangan Yang Berpotensi Tidak Ditanda dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
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!