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
Barbara Streisandoriginal
2024-10-26 18:06:30801parcourir

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>

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

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!

Déclaration:
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