Maison >développement back-end >Golang >Comment convertir des tranches de structures avec différentes balises JSON dans 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 :
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>
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!