Maison > développement back-end > Golang > Comment convertir en toute sécurité entre des tranches de structures dans Go : un guide de conversion de type et les meilleures pratiques

Comment convertir en toute sécurité entre des tranches de structures dans Go : un guide de conversion de type et les meilleures pratiques

Linda Hamilton
Libérer: 2024-10-31 10:50:02
original
323 Les gens l'ont consulté

How to Safely Convert Between Slices of Structs in Go: A Guide to Type Conversion and Best Practices

Conversion de type entre tranches de structures dans Go

Lorsque vous travaillez avec des tranches de structures dans Go, il est important de comprendre les différences entre les différentes genres. Dans ce cas, nous avons les types suivants :

  • ListSociete : Un type de structure personnalisé utilisé pour stocker une liste de structures Société.
  • [ ]Societe : Une tranche de structures Société.
  • []struct{Name string json:"a.name"} : Un type de structure anonyme avec un seul champ Name et un Balise JSON.

Question 1 : []struct{Name string} et []struct{Name string json:"a.name" } sont-ils différents ?

Oui, ils sont différents à cause de la balise JSON json:"a.name". Les spécifications Go indiquent clairement que deux types de structures ne sont identiques que s'ils ont les mêmes champs, noms, types et balises et.

Question 2 : ListSociete est-il différent de []struct{Name string} ?

Oui, ils sont différents car ListSociete est un type personnalisé tandis que []struct{Name string} est un type anonyme. Ils ont également des noms de champs différents.

_Solution :

Il existe deux options pour la conversion entre ces types :

Option 1 : Copier par itération

Cette méthode est sûre et fiable, mais nécessite une copie explicite :

<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

Cette méthode unsafe convertit directement la structure de données sous-jacente :

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

Cette méthode doit être utilisée avec prudence car elle peut provoquer un comportement inattendu .

_Exemple de terrain de jeu : http://play.golang.org/p/lfk7qBp2Gb

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