Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menangguhkan Fungsi dengan Selamat dengan Nilai Pulangan Yang Berpotensi Tidak Ditanda dalam Go?

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

Susan Sarandon
Susan Sarandonasal
2024-11-02 01:00:30847semak imbas

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>

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>

Fungsi pembantu ini kemudiannya boleh digunakan untuk menangguhkan fungsi asal:

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

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>

Menggunakan pembantu ini:

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

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!

Kenyataan:
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