Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah `reflect.Type` dan `reflect.Value` berbeza dalam pantulan Go, dan apakah cerapan yang mereka berikan tentang elemen program semasa masa jalan?
Memahami Jenis, Nilai dan Refleksi dalam Go
Dalam Go, refleksi menyediakan mekanisme untuk memeriksa dan memanipulasi kod pada masa jalan. Ia menawarkan dua jenis asas: reflect.Type dan reflect.Value, setiap satu menyediakan keupayaan berbeza untuk berinteraksi dengan elemen program.
Pertimbangkan coretan kod berikut:
<code class="go">func show(i interface{}) { switch t := i.(type) { case *Person: t := reflect.TypeOf(i) // What does 't' contain? v := reflect.ValueOf(i) // What does 'v' contain? tag := t.Elem().Field(0).Tag name := v.Elem().Field(0).String() } }</code>
Perbezaan Antara Jenis dan Nilai dalam Refleksi
refleksi.Jenis:
refleksi.Nilai:
Contoh Penggunaan
Dalam coretan kod yang disediakan, pernyataan suis menyemak sama ada i ialah tika "*Orang". Jika ya, reflect.TypeOf(i) mengembalikan jenis struct Person, membenarkan akses kepada teg medannya (cth., t.Elem().Field(0).Tag`).
Sementara itu, reflect.ValueOf(i) mengembalikan *reflect.Value for the Person. Dengan memanggil v.Elem().Field(0).String(), anda mendapatkan semula perwakilan rentetan bagi nilai medan pertamanya, tanpa mengira jenis kejadian tertentu.
Atas ialah kandungan terperinci Bagaimanakah `reflect.Type` dan `reflect.Value` berbeza dalam pantulan Go, dan apakah cerapan yang mereka berikan tentang elemen program semasa masa jalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!