Maison >développement back-end >Golang >Comment stocker plusieurs types de valeurs dans la carte GO?
Les cartes GO, par leur nature, sont conçues pour stocker des paires de valeurs clés où les touches sont d'un seul type et les valeurs sont d'un seul type. Vous ne pouvez pas stocker directement plusieurs types de valeurs différents dans une seule valeur de carte. Cependant, vous pouvez obtenir l'effet du stockage de plusieurs types de valeurs en utilisant une technique appelée interface {} . Le type interface{}
, également connu sous le nom d'interface vide, peut maintenir les valeurs de tout type. Cela vous permet de stocker divers types de données dans l'espace de valeur de votre carte, mais il est livré avec le compromis de nécessiter une affirmation de type explicite lors de la récupération des valeurs.
Par exemple:
<code class="go">package main import "fmt" func main() { myMap := make(map[string]interface{}) myMap["name"] = "John Doe" myMap["age"] = 30 myMap["active"] = true myMap["height"] = 1.85 fmt.Println(myMap) }</code>
Cet extrait de code démontre les chaînes, les entiers, les booléens et les flotteurs dans une seule carte en utilisant interface{}
. N'oubliez pas que cela permet une flexibilité, cela nécessite également une manipulation minutieuse pendant la récupération, comme discuté dans la section suivante.
Non, GO Maps ne peut pas tenir directement des types de données différents dans la même valeur Slot . Comme mentionné précédemment, les valeurs d'une carte GO doivent toutes être du même type. Tenter d'attribuer des valeurs de types différents à la même clé de carte entraînera une erreur de compilation. La solution de contournement, comme indiqué ci-dessus, est d'utiliser le type interface{}
, qui agit comme un conteneur pour tout type. Cela vous permet de stocker divers types de données dans le type interface{}
type , mais ne modifie pas la restriction fondamentale selon laquelle toutes les valeurs de la carte doivent être du type même type - Dans ce cas, le type interface{}
. Tapez des assertions pour récupérer et travailler en toute sécurité avec les valeurs stockées. Les assertions de type vérifient si la valeur d'interface contient une valeur d'un type spécifique et, dans l'affirmative, de la convertir en ce type. Ne pas effectuer une affirmation de type avant d'utiliser la valeur entraînera une panique d'exécution.
interface{}
La syntaxe
indique si l'affirmation a réussi. Vérifiez toujours
pour gérer gracieusement les erreurs potentielles. Cela empêche les paniques d'exécution si la valeur récupérée n'est pas du type attendu.<code class="go">package main import "fmt" func main() { myMap := map[string]interface{}{ "name": "John Doe", "age": 30, "active": true, "height": 1.85, } name, ok := myMap["name"].(string) if ok { fmt.Println("Name:", name) } else { fmt.Println("Name not found or incorrect type") } age, ok := myMap["age"].(int) if ok { fmt.Println("Age:", age) } else { fmt.Println("Age not found or incorrect type") } // and so on for other types... }</code>
Quelles sont les meilleures pratiques pour gérer différents types de données au sein d'une seule carte Go? .(type)
ok
Bien que l'utilisation de ok
offre une flexibilité, il est généralement préférable de l'éviter à moins que cela ne soit absolument nécessaire. La surutilisation de sureservant
ok
check in the type assertion example) when retrieving values from a Carte à l'aide de interface{}
. Cela aide à empêcher les accidents d'exécution en raison de types inattendus. Le choix de la bonne approche dépend du cas d'utilisation spécifique. Pour des scénarios simples, des cartes séparées pourraient suffire. Pour les structures de données complexes, les structures personnalisées sont un meilleur choix. N'oubliez pas de hiérarchiser la clarté, la sécurité et la maintenabilité dans votre code.
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!