Maison > développement back-end > Golang > Comment puis-je accéder aux clés de carte dans Go quel que soit le type de valeur ?

Comment puis-je accéder aux clés de carte dans Go quel que soit le type de valeur ?

Barbara Streisand
Libérer: 2025-01-01 07:35:10
original
893 Les gens l'ont consulté

How Can I Access Map Keys in Go Regardless of Value Type?

Travailler avec des cartes avec des types de valeurs distincts

Dans Go, les cartes sont des structures de données polyvalentes qui mappent les clés à des valeurs spécifiques. Cependant, des situations peuvent survenir dans lesquelles nous souhaitons utiliser les clés de plusieurs cartes, même si leurs types de valeurs diffèrent. Considérez l'extrait de code suivant :

func main() {
    mapOne := map[string]int
    mapTwo := map[string]double
    mapThree := map[string]SomeStruct

    useKeys(mapOne)
}

func useKeys(m map[string]interface{}) {
    // something with keys here
}
Copier après la connexion

Dans cet exemple, nous avons trois cartes : mapOne contient des entiers, mapTwo stocke des valeurs doubles et mapThree contient des instances de SomeStruct. Notre objectif est de créer une fonction useKeys qui accepte une carte avec des clés de chaîne et un type de valeur arbitraire noté interface{}. Cependant, cette conception ne fonctionne pas comme prévu.

Le défi de la covariance

Dans Go, les cartes et les tranches sont des structures génériques, mais elles manquent de covariance. Cela implique que même si vous pouvez attribuer un map[string]int à une variable de type map[string]interface{}, vous ne pouvez pas modifier en toute sécurité les valeurs de la carte attribuée sans provoquer d'erreurs.

Une méthode moins élégante, Mais Solution Fonctionnelle

Si l'on a uniquement besoin d'obtenir les clés d'une carte quel que soit son type de valeur, on peut recourir à la réflexion :

func useKeys(m interface{}) {
    v := reflect.ValueOf(m)
    if v.Kind() != reflect.Map {
        fmt.Println("not a map!")
        return
    }

    keys := v.MapKeys()
    fmt.Println(keys)
}
Copier après la connexion

Cette solution n'est pas aussi élégante comme nous le souhaiterions, mais il récupère et imprime efficacement les clés de toute carte qui lui est transmise, quels que soient les types de valeurs contenus.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal