Maison > développement back-end > Golang > Pourquoi l'accès à `map[string]interface{}` dans Go entraîne-t-il une erreur « type interface {} ne prend pas en charge l'indexation » ?

Pourquoi l'accès à `map[string]interface{}` dans Go entraîne-t-il une erreur « type interface {} ne prend pas en charge l'indexation » ?

Mary-Kate Olsen
Libérer: 2024-12-07 12:29:13
original
685 Les gens l'ont consulté

Why Does Accessing `map[string]interface{}` in Go Result in a

Erreur de syntaxe : accès à l'index refusé pour le type d'interface

Lorsque vous travaillez avec des cartes de type map[string]interface{} dans Go, c'est Il est important de comprendre pourquoi l'accès aux valeurs à l'aide de la notation d'index peut entraîner l'apparition frustrante de "l'interface de type {} ne prend pas en charge l'indexation". erreur.

La cause première : l'interface{}

Interface{} dans Go agit comme le caméléon d'un système de types, permettant à des objets de différents types d'être conservés dans un seul variable ou transmise par des fonctions. Cependant, la flexibilité a un coût : interface{} ne définit aucune méthode ou propriété spécifique, ce qui rend impossible l'exécution d'actions telles que l'indexation directement sur l'interface.

Comment résoudre le problème

Comment résoudre le problème

package main

import (
    "fmt"
)

type Host struct {
    Name string
}

func main() {
    Map := make(map[string]interface{})
    Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}}

    // Type cast the interface{} to a slice of Host
    hm := Map["hosts"].([]Host)
    fmt.Println(hm[0])
}
Copier après la connexion

Pour surmonter ce problème d'indexation, nous devons explicitement convertir la valeur interface{} en type approprié. Go fournit un certain nombre d’opérateurs de conversion de type pour faciliter ce processus. Examinons un exemple :

Dans cet exemple, nous avons une map[string]interface{} appelée "Map" où nous avons stocké une tranche d'objets Host comme valeur associée au " clé "hôtes". Pour accéder à un élément de cette tranche, nous tapons cast la valeur interface{} stockée dans Map["hosts"] vers une tranche de Host.

Playground Link

Pour expérimenter ce code et constater le résultat, accédez au lien suivant : [Playground Lien](https://go.dev/play/p/dJrycL1QD0C)

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