Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-05-04 10:27:01
original
520 Les gens l'ont consulté

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)
Copier après la connexion

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 个方法
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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()
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!