Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Go Berdasarkan Jenis Primitif?

Bagaimana untuk Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Go Berdasarkan Jenis Primitif?

Barbara Streisand
Barbara Streisandasal
2024-12-25 08:43:09569semak imbas

How to Get reflect.Interface Kind for a Go Type Based on a Primitive Type?

Cara Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Berdasarkan Jenis Primitif

Dalam Go, apabila bekerja dengan jenis yang melaksanakan antara muka tetapi bergantung pada jenis primitif dalam pelaksanaannya, ia menjadi perlu untuk mendapatkan refleksi.Jenis sebagai refleksi.Antaramuka. Artikel ini menangani keperluan ini dan menyediakan penyelesaian.

Masalahnya

Pertimbangkan situasi berikut:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

Di sini, ID ialah antara muka dilaksanakan oleh id, iaitu rentetan. Apabila kita menggunakan reflect.TypeOf(id) untuk mendapatkan jenis deskriptor, hasilnya bukan reflect yang diingini.Antaramuka sebaliknya reflect.String.

The Solution

Untuk menyelesaikan isu ini, adalah perlu untuk menghantar penunjuk kepada nilai antara muka dan bukannya nilai itu sendiri untuk mencerminkan.TypeOf(). Ini menghalang pembungkusan tersirat nilai dalam antara muka{}.

id := ID(id("test"))

t := reflect.TypeOf(&id).Elem()
fmt.Println(t.Kind()) // Output: "interface"

Dalam contoh ini, reflect.TypeOf(&id) mengembalikan penunjuk kepada nilai antara muka, yang kemudiannya dibuka menggunakan Elem() ke dapatkan deskriptor jenis antara muka itu sendiri. Pendekatan ini menyediakan pantulan yang diingini.Jenis Antaramuka.

Nota Tambahan

Teknik yang sama boleh digunakan untuk mendapatkan sebarang jenis pantulan.Jenis yang mengembalikan pantulan.Antaramuka apabila memanggil Jenis(). Hanya hantar penunjuk kepada nilai atau jenis untuk mencerminkan.TypeOf().

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Refleksi.Jenis Antara Muka untuk Jenis Go Berdasarkan Jenis Primitif?. 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