Maison >développement back-end >Golang >Comment puis-je accéder aux clés de Go Maps avec différents types de valeurs ?

Comment puis-je accéder aux clés de Go Maps avec différents types de valeurs ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-20 01:42:091005parcourir

How Can I Access Keys from Go Maps with Different Value Types?

Accès aux clés des cartes avec différents types de valeurs

Dans Go, les cartes sont intrinsèquement génériques, mais leur comportement n'est pas covariant en raison de l'absence de types génériques. Cela signifie que vous pouvez rencontrer des scénarios dans lesquels vous souhaitez accéder aux clés de cartes avec différents types de valeurs. Une tentative d'utilisation d'une interface{} comme type de valeur peut sembler intuitive, mais elle ne fonctionne pas comme prévu.

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
}

Bien qu'il soit compréhensible de désirer une solution élégante, il est nécessaire de reconnaître que dans Go , vous devrez peut-être reproduire une certaine logique pour les cartes avec différents types de valeurs.

Cependant, si vous avez besoin de flexibilité pour obtenir des clés à partir de n'importe quelle carte, la réflexion peut être employé :

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)
}

Cette approche permet de travailler avec des cartes de tout type, donnant accès à leurs clés.

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