Scénario d'application : application de la conversion de type et de la réflexion dans la réutilisation du code. Fonctions universelles : créez des fonctions pouvant gérer plusieurs types, comme la fonction suivante qui calcule la valeur maximale de plusieurs valeurs. Analyse JSON réfléchissante : accédez aux données JSON par réflexion sans vous fier à un type de structure spécifique. Gestion des valeurs dynamiques : utilisez la réflexion pour implémenter la gestion des valeurs dynamiques, comme le stockage et la récupération de valeurs.
L'application de conversion de type et de réflexion dans la réutilisation du code dans Go
Go fournit une variété de méthodes de conversion de type, notamment :
// 类型断言 val := interface{}(int)(val) // 将 interface{} 转换为 int // 类型转换 var val int = int(float) // 类型转换函数 val = strconv.Atoi(string)
Reflection permet au programme de s'exécuter au moment de l'exécution. Vérifiez et modifiez les types et les valeurs. L'interface de réflexion fournit les fonctions suivantes :
// 获得类型信息 val := reflect.TypeOf(val) // 获得值信息 val := reflect.ValueOf(val) // 检查类型 val.Kind() // 返回类型种类(例如 Int, Float) // 获得字段 val.Field(i) // 获取第 i 个字段的值 // 调用方法 val.Method(i).Call(args...) // 调用第 i 个方法
La conversion de type et la réflexion sont largement utilisées dans la réutilisation de code. Voici quelques exemples pratiques :
Fonctions génériques :
Créez des fonctions génériques pouvant gérer plusieurs types :
func Max(vals ...interface{}) interface{} { var maxVal interface{} for _, v := range vals { switch v.(type) { case int: if v.(int) > maxVal.(int) { maxVal = v } case float64: if v.(float64) > maxVal.(float64) { maxVal = v } } } return maxVal }
Analyse JSON réfléchissante :
Accédez aux données JSON par réflexion sans dépendre d'un type spécifique Structure :
type JSON map[string]interface{} func ParseJSON(data []byte) (JSON, error) { m := make(map[string]interface{}) if err := json.Unmarshal(data, &m); err != nil { return nil, err } return JSON(m), nil }
Traitement dynamique des valeurs :
Utilisez la réflexion pour mettre en œuvre un traitement dynamique des valeurs, tel que le stockage et la récupération de valeurs.
type ValueStore struct { m map[string]reflect.Value } func (s *ValueStore) Set(key string, val interface{}) { s.m[key] = reflect.ValueOf(val) } func (s *ValueStore) Get(key string) interface{} { return s.m[key].Interface() }
Ce 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!