Maison  >  Article  >  développement back-end  >  Application de la conversion de type Golang et de la réflexion dans la réutilisation du code

Application de la conversion de type Golang et de la réflexion dans la réutilisation du code

WBOY
WBOYoriginal
2024-05-04 10:27:01458parcourir

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.

golang 类型转换和反射在代码复用中的应用

L'application de conversion de type et de réflexion dans la réutilisation du code dans Go

Conversion de type

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

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 个方法

Applications de réutilisation de code

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn