Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menangguhkan Fungsi dengan Selamat dengan Nilai Pulangan Yang Berpotensi Tidak Ditanda dalam 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!