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

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