Conversion de type entre tranches de structures dans Golang
Cette enquête est centrée sur la conversion de type entre tranches de structures. Plus précisément, nous visons à convertir une tranche de structures anonymes en une tranche d'une structure définie.
Problème sous-jacent
Le problème survient en raison de la différence entre les deux types de structures :
- Structure Société avec un seul champ nommé Name
- Structure anonyme avec un seul champ nommé Name tagué avec json:"a.name"
La présence du tag crée un type de structure distinct, empêchant la conversion directe.
Options de solution
Option 1 : Itération et copie
- Parcourir les deux tranches et copiez manuellement chaque champ de la structure anonyme vers la structure Société.
- Cette approche est sûre et fiable mais moins efficace en raison de sa nature itérative.
<code class="go">ls := make(ListSociete, len(res))
for i := 0; i < len(res); i++ {
ls[i].Name = res[i].Name
}
return ls, nil</code>
Copier après la connexion
Option 2 : Conversion non sécurisée
- Conversion de type directe à l'aide de pointeurs non sécurisés.
- Cette méthode contourne la vérification de type et peut entraîner des erreurs d'exécution si les structures de données sous-jacentes changent de manière inattendue.
-
Attention : Utilisez cette approche avec prudence car elle compromet la sécurité des types.
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
Copier après la connexion
Bonnes pratiques
- Définissez les structures appropriées pour représenter le modèle de données.
- Utilisez des conversions de type explicites lorsque cela est nécessaire pour maintenir la sécurité des types.
- Optez pour l'approche d'itération et de copie sécurisée pour des conversions fiables.
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!