Amaran Errcheck tentang Menangguhkan Fungsi dengan Pembolehubah Pulangan
Apabila menangguhkan fungsi yang mengembalikan pembolehubah dalam Go, baris seperti gometalinter dan errcheck mungkin dikeluarkan amaran. Ini kerana fungsi tertunda tidak mempunyai nilai pulangan yang boleh diakses, yang membawa kepada potensi ralat yang tidak dapat dikendalikan.
Untuk menangani isu ini, pendekatan yang disyorkan ialah membungkus fungsi tertunda dalam fungsi tanpa nama atau bernama lain yang menangkap pembolehubah ralat.
Berikut ialah contoh menggunakan fungsi tanpa nama:
<code class="go">defer func() { if err := r.Body.Close(); err != nil { // Handle the error } }()</code>
Pendekatan ini membenarkan kod pengendalian ralat dilaksanakan serta-merta selepas fungsi tertunda, memastikan sebarang kemungkinan ralat tidak dibuang.
Sebagai alternatif, fungsi pembantu boleh dibuat untuk melakukan semakan ralat dan sebaliknya ditangguhkan:
<code class="go">func Check(f func() error) { if err := f(); err != nil { // Handle the error } } defer Check(r.Body.Close)</code>
Fungsi pembantu ini boleh digunakan semula untuk berbilang fungsi tertunda, memudahkan proses pengendalian ralat.
Sebagai contoh, fungsi pembantu yang diubah suai boleh menerima berbilang fungsi dan melaksanakannya dalam susunan terbalik:
<code class="go">func Checks(fs ...func() error) { for i := len(fs) - 1; i >= 0; i-- { if err := fs[i](); err != nil { // Handle the error } } } defer Checks(r.Body.Close, SomeOtherFunc)</code>
Ini memastikan bahawa fungsi tertunda terakhir dilaksanakan terlebih dahulu, meniru susunan pelaksanaan fungsi tertunda dalam Go .
Atas ialah kandungan terperinci Bagaimana Mengendalikan Amaran Errcheck Apabila Menangguhkan Fungsi dengan Pembolehubah Pulangan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!