Maison > développement back-end > Golang > Comment convertir des tranches de structures avec différentes balises JSON dans Go ?

Comment convertir des tranches de structures avec différentes balises JSON dans Go ?

Barbara Streisand
Libérer: 2024-10-26 18:06:30
original
808 Les gens l'ont consulté

How to Convert Slices of Structs with Different JSON Tags in Go?

Conversion de type entre tranches de structures dans Go

Dans Go, la conversion de type entre tranches de structures peut être difficile. Considérez le code suivant :

<code class="go">type Societe struct {
    Name string
}

type ListSociete []Societe

func loadListSociete(name string) (ListSociete, error) {
    res := []struct {
        Name string `json:"a.name"`
    }{}
    // ...
    return ListSociete(res), nil
}</code>
Copier après la connexion

Lorsque vous tentez de convertir res en ListSociete, cela échoue car ces types ne sont pas intrinsèquement interchangeables. Bien que les deux partagent une structure sous-jacente similaire, la présence de la balise JSON dans res les différencie.

Distinction clé : balises dans les types de structure

La spécification Go indique que deux Les types struct sont identiques s'ils ont la même séquence de champs, noms, types et balises. Le type res contient la balise json:"a.name", qui le distingue de Societe.

Options de conversion

Il existe deux options principales pour la conversion entre ces types :

  1. Itération et copie :

    Parcourez chaque élément en résolution, créant une nouvelle ListSociete en copiant le champ Nom de chaque élément. Bien que sûre, cette méthode est verbeuse et inefficace.

    <code class="go">ls := make(ListSociete, len(res))
    for i := 0; i < len(res); i++ {
        ls[i].Name = res[i].Name
    }</code>
    Copier après la connexion
  2. Conversion non sécurisée :

    Exploitez la structure de données sous-jacente partagée pour effectuer une conversion non sécurisée. conversion de types. Cependant, cela n'est pas recommandé car cela peut entraîner des erreurs inattendues.

    <code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
    Copier après la connexion

Conclusion

La conversion de type entre les tranches de structures peut être obtenu en utilisant soit l'itération et la copie, soit une conversion non sécurisée. Le choix dépend des exigences et des risques encourus. Il est important de comprendre les différences entre les types impliqués et les conséquences potentielles de toute approche de conversion.

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