Pourquoi vous ne pouvez pas convertir les types de tranches
Lorsque vous essayez de convertir une tranche d'un type en un autre, comme dans le segment de code fourni , Go génère une erreur. Cette erreur est due à des règles de conversion de type spécifiques définies dans la spécification Go.
L'erreur se produit car le type sous-jacent d'une tranche n'est pas directement lié au type sous-jacent de ses éléments. Bien que les types sous-jacents de Foo et Bar soient identiques, les types sous-jacents de tranches contenant des éléments Foo et Bar diffèrent.
Selon les règles d'assignabilité de Go, une valeur de type []Foo ne peut pas être attribuée à une variable de type []Bar. Cette divergence entraîne une erreur de conversion.
Pour résoudre ce problème, la conversion peut être effectuée via une structure de données intermédiaire. Par exemple, le code suivant fonctionne :
<code class="go">type Foo struct{ A int } type Bars []Foo func main() { foos := []Foo{Foo{1}, Foo{2}} bars := Bars(foos) fmt.Println(bars) } </code>
Sortie :
[{1} {2}]
De plus, l'utilisation du package non sécurisé peut contourner les contrôles de sécurité de type et permettre la conversion. Cependant, le package non sécurisé doit être utilisé avec prudence et uniquement dans des cas exceptionnels où les performances et la complexité sont des préoccupations majeures.
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!