Reflection est un puissant mécanisme Go qui peut inspecter et manipuler les informations de type, y compris les informations de type (via Reflect.TypeOf) et les informations de valeur (via Reflect.ValueOf). Il peut être utilisé pour diverses tâches telles que la sérialisation de données JSON, où la réflexion est utilisée pour parcourir des champs ou des éléments d'une structure, d'une tranche ou d'un tableau et les sérialiser dans une chaîne JSON. Il est important de noter que l’utilisation de la réflexion entraîne une surcharge, ne peut pas accéder aux champs privés et peut provoquer des erreurs d’exécution.
La réflexion est un mécanisme puissant du langage Go qui permet aux programmes d'inspecter et de manipuler les informations de type au moment de l'exécution. Cela le rend idéal pour des tâches telles que la sérialisation, la vérification de type et la génération de code générique.
Chaque type Go est associé à une valeur reflect.Type
. Pour obtenir des informations de type, utilisez la fonction reflect.TypeOf
: reflect.Type
值相关联。要获取类型信息,请使用 reflect.TypeOf
函数:
type Person struct { Name string Age int } var person = Person{"John", 30} personType := reflect.TypeOf(person)
反射还可以访问值信息。要获取值信息,请使用 reflect.ValueOf
value := reflect.ValueOf(person)
reflect.ValueOf
: 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) } }
rrreee
NotesCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!