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!