Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memeriksa Antara Muka Tiada dan Nilai Nil dengan Boleh Dipercayai dalam Go?

Bagaimanakah Saya Boleh Memeriksa Antara Muka Tiada dan Nilai Nil dengan Boleh Dipercayai dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-11 19:07:12
asal
376 orang telah melayarinya

How Can I Reliably Check for Nil Interfaces and Nil Values in Go?

Menyemak Antara Muka Tiada dan Tiada dalam Go

Apabila bekerja dengan antara muka dalam Go, selalunya perlu menyemak sama ada antara muka adalah sifar atau mengandungi nilai nol. Walau bagaimanapun, pendekatan standard menggunakan pantulan boleh bertele-tele dan terdedah kepada ralat.

Sebagai contoh, pertimbangkan fungsi pembantu berikut:

func isNil(a interface{}) bool {
  defer func() { recover() }()
  return a == nil || reflect.ValueOf(a).IsNil()
}
Salin selepas log masuk

Fungsi ini menggunakan pantulan untuk menyemak sama ada nilainya sifar , tetapi ia memerlukan recover() tertunda untuk mengendalikan panik apabila jenis nilai tidak disokong.

Lebih Langsung Pendekatan

Seperti yang dicadangkan oleh jawapan kepada soalan asal, pendekatan yang lebih mudah dan boleh dipercayai ialah menggunakan perbandingan langsung untuk antara muka nil dan sentiasa membenarkan penugasan antara muka nil kepada yang tidak ditaip. Begini caranya:

func isNil(a interface{}) bool {
  return a == nil
}
Salin selepas log masuk

Fungsi ini akan menyemak dengan betul kedua-dua antara muka nil dan nilai nil dalam antara muka.

Apabila Tugasan (*T)(nil) Dibenarkan

Pendekatan yang digariskan di atas menganggap bahawa anda tidak akan sekali-kali memberikan (*T)(nil) kepada antara muka. Jika ini tidak berlaku, anda mungkin perlu menggunakan refleksi untuk menyemak nilai sifar:

func isNil(a interface{}) bool {
  if a == nil {
    return true
  }
  v := reflect.ValueOf(a)
  if v.Kind() == reflect.Ptr && v.IsNil() {
    return true
  }
  return false
}
Salin selepas log masuk

Walau bagaimanapun, secara amnya disyorkan untuk mengelak daripada memberikan (*T)(nil) kepada antara muka, kerana ia boleh membawa kepada pepijat halus. Dengan menguatkuasakan peraturan jangan sekali-kali menyimpan (*T)(nil) dalam antara muka, anda boleh memudahkan kod anda dan meningkatkan kebolehpercayaannya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memeriksa Antara Muka Tiada dan Nilai Nil dengan Boleh Dipercayai 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