Reflection ialah mekanisme Go yang berkuasa yang boleh memeriksa dan memanipulasi maklumat jenis, termasuk maklumat jenis (melalui reflect.TypeOf) dan maklumat nilai (melalui reflect.ValueOf). Ia boleh digunakan untuk pelbagai tugas seperti mensiri data JSON, di mana pantulan digunakan untuk mengulangi medan atau elemen dalam struktur, kepingan atau tatasusunan dan mensirikannya ke dalam rentetan JSON. Adalah penting untuk ambil perhatian bahawa penggunaan pantulan menimbulkan overhed, tidak boleh mengakses medan peribadi dan boleh menyebabkan ralat masa jalan. . Ini menjadikannya sesuai untuk tugas seperti penyirian, pemeriksaan jenis dan penjanaan kod generik.
Maklumat taip
Setiap jenis Go dikaitkan dengan nilaireflect.Type
. Untuk mendapatkan maklumat jenis, gunakan fungsi reflect.TypeOf
: type Person struct { Name string Age int } var person = Person{"John", 30} personType := reflect.TypeOf(person)
reflect.ValueOf
: value := reflect.ValueOf(person)
func SerializeJSON(v interface{}) (string, error) { value := reflect.ValueOf(v) kind := value.Type().Kind() switch kind { case reflect.Struct: // 对于结构,遍历其字段并序列化每一个字段 fields := value.NumField() jsonStr := `{` for i := 0; i < fields; i++ { fieldValue := value.Field(i) jsonStr += ", " + SerializeJSON(fieldValue.Interface()) } jsonStr += "}" return jsonStr, nil case reflect.Slice, reflect.Array: // 对于切片或数组,遍历其元素并序列化每一个元素 length := value.Len() jsonStr := `[` for i := 0; i < length; i++ { jsonStr += ", " + SerializeJSON(value.Index(i).Interface()) } jsonStr += "]" return jsonStr, nil default: return json.Marshal(v) } }
reflect.Type
值相关联。要获取类型信息,请使用 reflect.TypeOf
函数:rrreee反射还可以访问值信息。要获取值信息,请使用 reflect.ValueOf
Nota
Atas ialah kandungan terperinci Mekanisme refleksi pergi didedahkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!