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
Mary-Kate Olsenasal
2024-12-11 19:07:12377semak imbas

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()
}

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
}

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
}

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!

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