Structure Golang pour les objets imbriqués
L'éditeur PHP Apple a partagé une introduction détaillée à la structure utilisée pour les objets imbriqués dans le langage Golang. Dans Golang, la structure d'objets imbriqués est une fonctionnalité puissante qui nous permet d'imbriquer d'autres structures ou types d'interfaces au sein d'une structure. Grâce à la structure des objets imbriqués, nous pouvons facilement combiner et réutiliser le code, améliorant ainsi la lisibilité et la maintenabilité du code. De plus, la structure des objets imbriqués peut également produire l'effet d'héritage multiple, nous permettant de concevoir et de construire des structures de données complexes de manière plus flexible. Dans cet article, nous discuterons en détail des méthodes et techniques d'utilisation de la structure des objets imbriqués dans Golang pour aider les lecteurs à mieux comprendre et appliquer cette fonctionnalité.
Contenu de la question
J'utilise actuellement gofiber v2 pour créer l'API golang.
J'ai la structure de document suivante pour un morceau de musique dans une base de données mongo :
{ "_id" : objectid("63cc26cb86ae1611380e1206"), "active" : 1, "exclusive" : "false", "track_title" : "burn slow (sting)", "artist_id" : "395", "artist_name" : "david hollandsworth", "album_title" : "cult justice 23", "composer" : "david hollandsworth", "duration" : "00:16", "publisher" : "fliktrax, llc", "description" : "t.v. drama, rural tension, apprehension. style: \"hell on wheels\" soundtrack.", "url_path" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav", "vocal_type" : "instrumental", "beats_per_minute" : "80", "file_path_compressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.mp3", "file_path_uncompressed" : "davidhollandsworth/cultjustice23/burn-slow-sting.wav", "genres" : [ "tension", "americana", "tv drama" ], "genres_keys" : [ "tension", "americana", "tv drama" ], "moods" : [ "tension", "bluesy", "spacey" ], "styles" : [ "tv drama", "unsolved mystery", "western" ], "instruments" : [ "dobro", "banjo", "percussion" ], "keywords" : [ "rural-tension", " showdown", " apprehension", " uncertainty", " light-tension", " strings-tension", " heartland", " trouble", " uneasy", " cautious", " outlaw", " yellowstone", " bayou", " gritty", " swampy", " swamp-people", " southern", " uncertain", " drama", " apprehension", " bluesy", " blues", " shack", " poor-folk", " primitive" ], "sounds_like" : [ "brian tyler", "max richter", "t.v. drama" ], "resembles_song" : [ "hell on wheels", "yellowstone", "rural/outlaw/tension" ], "last_modified" : 1674323659, "variation_count" : 5, "variations" : { "_id" : objectid("63cc26bc86ae1611380e1200"), "track_title" : "burn slow", "artist_name" : "david hollandsworth", "master_track_id" : "63cc26bc86ae1611380e1200", "master_track" : objectid("63cc26bc86ae1611380e1200"), "merged" : 1, "variation_count" : 5, "variations" : { "63cc26bc86ae1611380e1200" : { "track_id" : "63cc26bc86ae1611380e1200", "track_title" : "burn slow", "artist_name" : "david hollandsworth" }, "63cc26c086ae1611380e1203" : { "track_id" : "63cc26c086ae1611380e1203", "track_title" : "burn slow (bed mix)", "artist_name" : "david hollandsworth" }, "63cc26c386ae1611380e1204" : { "track_id" : "63cc26c386ae1611380e1204", "track_title" : "burn slow (cutdown)", "artist_name" : "david hollandsworth" }, "63cc26c786ae1611380e1205" : { "track_id" : "63cc26c786ae1611380e1205", "track_title" : "burn slow (lows and perc)", "artist_name" : "david hollandsworth" }, "63cc26cb86ae1611380e1206" : { "track_id" : "63cc26cb86ae1611380e1206", "track_title" : "burn slow (sting)", "artist_name" : "david hollandsworth" } } } }
Actuellement, j'ai la structure de piste suivante dans mon modèle golang :
type Track struct { ID primitive.ObjectID `bson:"_id, omitempty" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistId string `bson:"artist_id" json:"artist_id"` ArtistName string `bson:"artist_name" json:"artist_name"` AlbumTitle string `bson:"album_title" json:"album_title"` Composer string `bson:"composer" json:"composer"` Publisher string `bson:"publisher" json:"publisher"` Description string `bson:"description" json:"description"` Duration string `bson:"duration" json:"duration"` UrlPath string `bson:"url_path" json:"url_path"` VocalType string `bson:"vocal_type" json:"vocal_type"` BeatsPerMinute string `bson:"beats_per_minute" json:"beats_per_minute"` FilePathCompressed string `bson:"file_path_compressed" json:"bfile_path_compressed"` FilePathUncompressed string `bson:"file_path_uncompressed" json:"file_path_uncompressed"` PreviewURL string `bson:"preview_url" json:"preview_url"` Genres []interface{} `bson:"genres" json:"genres"` GenresKeys []interface{} `bson:"genres_keys" json:"genres_keys"` Moods []interface{} `bson:"moods" json:"moods"` Styles []interface{} `bson:"styles" json:"styles"` Instruments []interface{} `bson:"instruments" json:"instruments"` Keywords []interface{} `bson:"keywords" json:"keywords"` SoundsLike []interface{} `bson:"sounds_like" json:"sounds_like"` ResemblesSong []interface{} `bson:"resembles_song" json:"resembles_song"` LastModified int `bson:"last_modified" json:"last_modified"` VariationCount int `bson:"variation_count" json:"variation_count"` }
Actuellement, tous les champs du document sont correctement décodés en json, mais je ne sais plus comment construire le champ "variations.variations" intégré (notez qu'il existe des variations au sein des variations). La structure de la variante intégrée est un objet sans clé, mais une chaîne d'identification mongo dynamique.
J'ai essayé d'implémenter des types de structure et d'interface personnalisés, mais sans succès.
Si quelqu'un a déjà rencontré ce problème, toute aide serait grandement appréciée.
Solution
Je recommande d'éviter interface{}
(或 any
),使用具体类型。例如。 genres
是一个字符串数组,在 go 中使用 []string
si possible.
Pour la clé variations.variations
字段,您可以使用 map
以及 string
et le type de structure décrivant ses éléments.
type Track struct { ID primitive.ObjectID `bson:"_id, omitempty" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistId string `bson:"artist_id" json:"artist_id"` ArtistName string `bson:"artist_name" json:"artist_name"` AlbumTitle string `bson:"album_title" json:"album_title"` Composer string `bson:"composer" json:"composer"` Publisher string `bson:"publisher" json:"publisher"` Description string `bson:"description" json:"description"` Duration string `bson:"duration" json:"duration"` UrlPath string `bson:"url_path" json:"url_path"` VocalType string `bson:"vocal_type" json:"vocal_type"` BeatsPerMinute string `bson:"beats_per_minute" json:"beats_per_minute"` FilePathCompressed string `bson:"file_path_compressed" json:"bfile_path_compressed"` FilePathUncompressed string `bson:"file_path_uncompressed" json:"file_path_uncompressed"` PreviewURL string `bson:"preview_url" json:"preview_url"` Genres []string `bson:"genres" json:"genres"` GenresKeys []string `bson:"genres_keys" json:"genres_keys"` Moods []string `bson:"moods" json:"moods"` Styles []string `bson:"styles" json:"styles"` Instruments []string `bson:"instruments" json:"instruments"` Keywords []string `bson:"keywords" json:"keywords"` SoundsLike []string `bson:"sounds_like" json:"sounds_like"` ResemblesSong []string `bson:"resembles_song" json:"resembles_song"` LastModified int `bson:"last_modified" json:"last_modified"` VariationCount int `bson:"variation_count" json:"variation_count"` Variations Variations `bson:"variations" json:"variations"` } type Variations struct { ID primitive.ObjectID `bson:"_id" json:"_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistName string `bson:"artist_name" json:"artist_name"` MasterTrackID string `bson:"master_track_id" json:"master_track_id"` MasterTrack primitive.ObjectID `bson:"master_track" json:"master_track"` Merged int `bson:"merged" json:"merged"` VariationCount int `bson:"variation_count" json:"variation_count"` Variations map[string]Variation `bson:"variations" json:"variations"` } type Variation struct { TrackID string `bson:"track_id" json:"track_id"` TrackTitle string `bson:"track_title" json:"track_title"` ArtistName string `bson:"artist_name" json:"artist_name"` }
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

AI Hentai Generator
Générez AI Hentai gratuitement.

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



La fonction SPLIT() divise une chaîne en un tableau par un délimiteur spécifié, renvoyant un tableau de chaînes où chaque élément est une partie séparée par un délimiteur de la chaîne d'origine. L'utilisation comprend : diviser une liste de valeurs séparées par des virgules dans un tableau, extraire les noms de fichiers des chemins et diviser les adresses e-mail en noms d'utilisateur et domaines.

Façons de trier des chaînes en Java : utilisez la méthode Arrays.sort() pour trier un tableau de chaînes par ordre croissant. Utilisez la méthode Collections.sort() pour trier une liste de chaînes par ordre croissant. Utilisez l'interface Comparator pour un tri personnalisé des chaînes.

En langage C, \0 est la marque de fin d’une chaîne, appelée caractère nul ou terminateur. Étant donné que les chaînes sont stockées en mémoire sous forme de tableaux d'octets, le compilateur reconnaît la fin de la chaîne via \0, garantissant ainsi que les chaînes sont traitées correctement. \0 Comment ça marche : Le compilateur arrête de lire les caractères lorsqu'il rencontre \0 et les caractères suivants sont ignorés. \0 lui-même n'occupe pas d'espace de stockage. Les avantages incluent une gestion fiable des chaînes, une efficacité améliorée (pas besoin d'analyser l'ensemble du tableau pour trouver la fin) et une facilité de comparaison et de manipulation.

args est un tableau de paramètres spécial de la méthode main en Java, utilisé pour obtenir un tableau de chaînes de paramètres de ligne de commande ou d'entrée externe. En accédant au tableau args, le programme peut lire ces arguments et les traiter selon les besoins.

args signifie arguments de ligne de commande en Java et est un tableau de chaînes contenant la liste des arguments transmis au programme lors de son démarrage. Il n'est disponible que dans la méthode main et sa valeur par défaut est un tableau vide, chaque paramètre étant accessible par index. args est utilisé pour recevoir et traiter les arguments de ligne de commande afin de configurer ou de fournir des données d'entrée au démarrage d'un programme.

Comment implémenter la fonction de tri des caractères chinois dans un logiciel de programmation en langage C ? Dans la société moderne, la fonction de tri des caractères chinois est l’une des fonctions essentielles de nombreux logiciels. Que ce soit dans les logiciels de traitement de texte, les moteurs de recherche ou les systèmes de bases de données, les caractères chinois doivent être triés pour mieux afficher et traiter les données textuelles chinoises. En programmation en langage C, comment implémenter la fonction de tri des caractères chinois ? Une méthode est brièvement présentée ci-dessous. Tout d'abord, afin d'implémenter la fonction de tri des caractères chinois en langage C, nous devons utiliser la fonction de comparaison de chaînes. Couru

L'impact des fonctions sur les performances du programme C++ comprend la surcharge des appels de fonction, la surcharge des variables locales et de l'allocation d'objets : La surcharge des appels de fonction : y compris l'allocation de trame de pile, le transfert de paramètres et le transfert de contrôle, ce qui a un impact significatif sur les petites fonctions. Surcharge d'allocation de variables locales et d'objets : un grand nombre de créations et de destructions de variables locales ou d'objets peuvent entraîner un débordement de pile et une dégradation des performances.

Quel est le point de départ pour exécuter un programme en langage C ? Le langage C, en tant que langage de programmation de haut niveau, est l'un des langages de programmation les plus couramment utilisés. Dans le processus d'apprentissage du langage C, de nombreuses personnes seront confuses quant au point de départ de l'exécution du programme C. Alors, quel est le point de départ pour exécuter un programme en langage C ? La réponse est la fonction principale. Dans les programmes en langage C, l'exécution du programme commence au début de la fonction principale. La fonction principale est le point d'entrée du programme en langage C et la première fonction définie par le programmeur à exécuter. Sa fonction principale est de définir le processus
