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