Maison >développement back-end >Golang >Comment convertir une tranche de chaînes en une tranche d'un type personnalisé en Go sans duplication de données ?

Comment convertir une tranche de chaînes en une tranche d'un type personnalisé en Go sans duplication de données ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 03:52:09517parcourir

How to Convert a Slice of Strings to a Slice of a Custom Type in Go Without Data Duplication?

Conversion d'une tranche de chaîne en tranche de type personnalisé

Question :

Go empêche la conversion directe d'une tranche de chaînes en une tranche d'un type personnalisé qui partage le même type d'élément sous-jacent. Pourquoi cette restriction est-elle en place et existe-t-il une alternative pour éviter la duplication des données ?

Réponse :

Raison de la restriction :

Cette restriction a été implémentée pour empêcher les conversions de types accidentelles entre des types non liés qui ont par hasard le même structure.

Méthode de conversion alternative utilisant le package « unsafe » :

Bien que la conversion directe ne soit pas autorisée, il est possible de convertir des tranches directement sans copier à l'aide du package non sécurisé. Cependant, cette approche nécessite une extrême prudence :

value := []string{"a", "b", "c"}

// convert &value (type *[]string) to *[]Card via unsafe.Pointer, then deref
cards := *(*[]Card)(unsafe.Pointer(&value))

firstHand := NewHand(cards)

Avertissement :

Le type unsafe.Pointer permet un accès arbitraire à la mémoire, il doit donc être utilisé avec le plus grand soin et compréhension des risques potentiels.

Recommandation :

Généralement, il est Il est plus sûr de copier les données de tranche dans le type personnalisé souhaité pour éviter les erreurs potentielles et les comportements indéfinis.

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