Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mendapatkan semula `reflect.Type` bagi Antara Muka dalam Go?

Bagaimana untuk Mendapatkan semula `reflect.Type` bagi Antara Muka dalam Go?

DDD
DDDasal
2024-12-24 04:45:10673semak imbas

How to Retrieve the `reflect.Type` of an Interface in Go?

Mendapatkan semula Reflect.Jenis Antara Muka

Menentukan sama ada jenis melaksanakan antara muka melalui pakej reflect memerlukan penghantaran reflect.Type to reflect.Type.Implements(). Artikel ini meneroka proses mendapatkan jenis sedemikian.

Mendapatkan Jenis Antara Muka Tidak Dimulakan

Percubaan untuk mendapatkan semula jenis antara muka ralat yang tidak dimulakan (iaitu antara muka type) menggunakan reflect.TypeOf() secara langsung akan mengakibatkan panik apabila cuba mengakses kaedah Kind() yang diperoleh taip. Untuk mengelakkan isu ini, pendekatan berikut boleh digunakan:

Pendekatan 1:

var err error
t := reflect.TypeOf(&err).Elem()

Pendekatan ini melibatkan mendapatkan jenis penunjuk ke antara muka, dan kemudian mendapatkan semula jenis konkrit asas (elemen) menggunakan Elem().

Pendekatan 2 (One-Liner):

t := reflect.TypeOf((*error)(nil)).Elem()

Pendekatan ini memanfaatkan fakta bahawa nilai antara muka sifar boleh ditaip ditegaskan kepada mana-mana jenis antara muka. Dengan mencipta penuding nol kepada jenis antara muka yang diingini dan mendapatkan semula jenisnya, anda boleh terus mendapatkan jenis konkrit tanpa perlu mengambil alamat pembolehubah.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan semula `reflect.Type` bagi Antara Muka 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