Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menentukan Pelaksanaan Antara Muka Menggunakan `reflect.Type` Go?

Bagaimanakah Saya Boleh Menentukan Pelaksanaan Antara Muka Menggunakan `reflect.Type` Go?

Barbara Streisand
Lepaskan: 2024-12-26 07:42:10
asal
465 orang telah melayarinya

How Can I Reliably Determine Interface Implementation Using Go's `reflect.Type`?

Menentukan Pelaksanaan Antara Muka menggunakan Reflect.Type

Dalam pengaturcaraan berorientasikan objek, adalah penting untuk menyemak sama ada sesuatu jenis melaksanakan antara muka tertentu. Untuk melakukan ini dengan berkesan dalam pakej refleksi Go, representasi reflect.Type antara muka diperlukan. Walau bagaimanapun, mendapatkan jenis ini boleh menjadi mencabar, terutamanya apabila berurusan dengan jenis antara muka yang tidak dimulakan seperti ralat.

Pertimbangkan percubaan berikut, yang membawa kepada panik:

var err error
fmt.Printf("%#v\n", reflect.TypeOf(err).Kind())
Salin selepas log masuk

Untuk menyelesaikan isu ini , fungsi reflect.TypeOf mesti dipanggil pada penunjuk kepada nilai antara muka, bukan nilai itu sendiri. Selain itu, kaedah Elem() boleh digunakan untuk mendapatkan jenis asas penuding, yang mewakili jenis antara muka:

var err error
t := reflect.TypeOf(&err).Elem()
Salin selepas log masuk

Sebagai alternatif, penyelesaian satu baris boleh dicapai menggunakan penegasan jenis:

t := reflect.TypeOf((*error)(nil)).Elem()
Salin selepas log masuk

Kini, reflect.Type yang diperolehi boleh dihantar untuk reflect.Type.Implements() untuk menentukan sama ada ia melaksanakan antara muka yang dikehendaki.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Pelaksanaan Antara Muka Menggunakan `reflect.Type` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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