


Comment lire la valeur de l'interface avec l'adresse de la structure
En langage Go, l'interface est un type très puissant et flexible. Cependant, nous pouvons rencontrer une certaine confusion en essayant de lire l'adresse de la structure dans une valeur d'interface. Alors, comment lire une valeur d’interface qui a une adresse de structure ? Dans cet article, nous répondrons à cette question pour vous et vous fournirons quelques conseils pratiques et des exemples de code. Que vous soyez débutant ou développeur Go expérimenté, cet article vous aidera. Nous allons jeter un coup d'oeil!
Contenu de la question
J'ai une variable avec un type de données interface{}
et je lui passe l'adresse d'une structure. Maintenant, je n'arrive plus à lire les champs depuis l'interface
Le code est le suivant :
type UserData struct { UserID string `json:"user_id"` UserName string `json:"user_name"` } type Result struct { Status string `json:"status"` Data interface{} `json:"data"` } var res Result res.Data = &UserData json.Unmarshal([]byte(`{"status": "success", "data": {"user_id":15,"user_name":"abc"}}`), &res) fmt.Println(res.Data) //working fine fmt.Println(res.Data.UserName) //getting error: type interface{} has no field or method UserName
Si j'utilise res.data.username
j'obtiens une erreur
Comment lire les champs de structure depuis l'interface ?
Solution de contournement
Comparez cela avec golang Pourquoi les champs qui n'existent pas dans les structures go existent-ils toujours après le rassemblement de ladite structure en json. Au début, je pensais que c'était les mêmes. Mais il s’est avéré que ce n’était pas le cas.
Pour cette question, une valeur de type res.data
拥有 *userdata
. Une simple assertion de type fera donc l’affaire.
package main import ( "encoding/json" "fmt" ) type userdata struct { userid string `json:"user_id"` username string `json:"user_name"` } type result struct { status string `json:"status"` data interface{} `json:"data"` } func main() { var res result res.data = &userdata{} json.unmarshal([]byte(`{"status": "success", "data": {"user_id":15,"user_name":"abc"}}`), &res) fmt.println(res.data) fmt.println(res.data.(*userdata).username) }
La démo suivante est une fusion de deux démos de @mkopriva qui montre la différence :
package main import ( "encoding/json" "fmt" "log" ) type dbbatch struct { fieldtokeep string `json:"field_to_keep"` fieldtokeep2 string `json:"field_to_keep2"` } func main() { jsonbatch := `{"field_to_keep":"xxxxx","field_to_keep2":"26400527","field_to_delete":"whynotdeleted"}` var i interface{} = dbbatch{} fmt.printf("%t\n", i) // type is dbbatch if err := json.unmarshal([]byte(jsonbatch), &i); err != nil { log.println(err) } fmt.printf("%t\n", i) // type is not dbbatch anymore, instead it's map[string]any i = &dbbatch{} fmt.printf("%t\n", i) // type is *dbbatch if err := json.unmarshal([]byte(jsonbatch), &i); err != nil { log.println(err) } fmt.printf("%t\n", i) // type is *dbbatch }
Le résultat est :
main.DBBatch map[string]interface {} *main.DBBatch *main.DBBatch
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Oui, la production de pages H5 est une méthode de mise en œuvre importante pour le développement frontal, impliquant des technologies de base telles que HTML, CSS et JavaScript. Les développeurs construisent des pages H5 dynamiques et puissantes en combinant intelligemment ces technologies, telles que l'utilisation du & lt; Canvas & gt; Tag pour dessiner des graphiques ou utiliser JavaScript pour contrôler le comportement d'interaction.

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

La méthode de personnalisation des symboles de redimension dans CSS est unifiée avec des couleurs d'arrière-plan. Dans le développement quotidien, nous rencontrons souvent des situations où nous devons personnaliser les détails de l'interface utilisateur, tels que l'ajustement ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Concernant les raisons et les solutions pour l'affichage mal aligné des éléments de blocage en ligne. Lors de la mise en page de la page Web, nous rencontrons souvent des problèmes d'affichage apparemment étranges. Comparer...

Comment utiliser JavaScript ou CSS pour contrôler le haut et la fin de la page dans les paramètres d'impression du navigateur. Dans les paramètres d'impression du navigateur, il existe une option pour contrôler si l'écran est ...

Comment réaliser l'effet de courbe à 45 degrés du segmenter? Dans le processus de mise en œuvre du segmentant, comment faire transformer la bordure droite en une courbe de 45 degrés lorsque vous cliquez sur le bouton gauche, et le point ...
