Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mendapatkan `reflect.Kind.Interface` untuk Jenis Melaksanakan Antara Muka Berdasarkan Jenis Primitif dalam Go?

Bagaimana untuk Mendapatkan `reflect.Kind.Interface` untuk Jenis Melaksanakan Antara Muka Berdasarkan Jenis Primitif dalam Go?

Barbara Streisand
Lepaskan: 2024-12-31 05:30:12
asal
594 orang telah melayarinya

How to Retrieve `reflect.Kind.Interface` for a Type Implementing an Interface Based on a Primitive Type in Go?

Mendapatkan semula refleksi.Jenis untuk Jenis Berdasarkan Jenis Primitif

Dalam Go, menentukan pantulan.Jenis jenis boleh menjadi rumit apabila jenis melaksanakan antara muka berdasarkan jenis primitif. Sebagai contoh, pertimbangkan senario berikut:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))

    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))

    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}
Salin selepas log masuk

Dalam contoh ini, antara muka ID dilaksanakan mengikut jenis id, yang berdasarkan jenis rentetan primitif. Walaupun kita mahu reflect.TypeOf(id).Kind() untuk mengembalikan reflect.Antaramuka, ia sebaliknya mengembalikan reflect.String.

Penyelesaian menggunakan Penunjuk ke Antara Muka

Kepada menyelesaikan isu ini, kita perlu ingat bahawa reflect.TypeOf() mengharapkan antara muka{}. Apabila bekerja dengan nilai bukan antara muka, Go membungkusnya secara automatik dalam antara muka{} secara tersirat. Untuk mengelakkan perkara ini, kami boleh menggunakan penuding ke antara muka.

t := reflect.TypeOf(&id).Elem()
fmt.Println(t.Kind())
Salin selepas log masuk

Dengan menggunakan reflect.TypeOf(&id).Elem(), kami mendapatkan semula deskriptor jenis antara muka ID, iaitu apa yang kami ada. berminat. Kaedah Elem() memberikan kami jenis elemen jenis penunjuk, iaitu jenis antara muka.

Menjalankan kod yang dikemas kini kini akan output:

test
main.ID
interface
Salin selepas log masuk

Ini menunjukkan cara mendapatkan pantulan dengan betul. Jenis untuk jenis yang melaksanakan antara muka berdasarkan jenis primitif.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan `reflect.Kind.Interface` untuk Jenis Melaksanakan Antara Muka Berdasarkan Jenis Primitif 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