Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-10-31 10:50:02253parcourir

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>

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>

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!

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