Jenis Refleksi dan Nilai dalam Go
Soalan:
Dalam coretan kod Go 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>
Salin selepas log masuk
Apakah perbezaan antara jenis dan nilai dalam pantulan?
Jawapan:
Dalam Go, pantulan menyediakan dua binaan utama: reflect.Type and reflect .Nilai. Jenis ini membolehkan anda mengintrospeksi dan memanipulasi data pada masa jalan.
-
reflect.Type: Mewakili maklumat jenis sesuatu nilai, seperti namanya, jenis asas dan medan struct . Ia membolehkan anda menanyakan maklumat yang terikat kepada semua pembolehubah dengan jenis yang sama.
-
reflect.Value: Mewakili nilai individu dan membolehkan anda berinteraksi dengan datanya. Anda boleh menggunakannya untuk menetapkan dan mendapatkan nilai, menukar antara jenis dan melaksanakan operasi lain pada data asas.
Dalam coretan kod yang disediakan:
- t := reflect.TypeOf(i) mengembalikan reflect.Type yang mewakili jenis nilai yang dihantar ke fungsi show.
- v := reflect.ValueOf(i) mengembalikan reflect.Value yang mewakili nilai sebenar yang diluluskan kepada fungsi.
Untuk mengakses maklumat tentang jenis dan nilai, anda boleh menggunakan kaedah berikut:
- t.Elem(): Mengembalikan pantulan.Jenis elemen asas jika jenisnya ialah penunjuk.
- t.Field(0).Tag: Mengembalikan teg yang dikaitkan dengan medan pertama jenis.
- v.Elem(): Mengembalikan the reflect.Nilai elemen asas jika nilai ialah penunjuk.
- v.Field(0).String() : Menukarkan data dalam medan pertama nilai kepada rentetan.
Atas ialah kandungan terperinci Apakah Perbezaan Antara reflect.Type dan reflect.Value in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!