Maison > développement back-end > Golang > le corps du texte

Pourquoi ne puis-je pas convertir directement entre des tranches de différents types d'éléments dans Go ?

DDD
Libérer: 2024-10-25 17:32:02
original
286 Les gens l'ont consulté

Why Can't I Directly Convert Between Slices of Different Element Types in Go?

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>
Copier après la connexion

Sortie :

[{1} {2}]
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!