Maison > Article > développement back-end > Comment puis-je récupérer une tranche d’octets à partir d’une chaîne en Go sans copie de mémoire ?
Problème :
Vous devez convertir une chaîne à une tranche d'octets sans encourir la pénalité de performances de la copie de mémoire, en particulier pour la gestion de grands ensembles de données.
Réponse :
Étape 1 : Comprendre la copie de mémoire Problème
Les chaînes dans Go sont immuables, ce qui signifie qu'elles ne peuvent pas être modifiées sur place. Par conséquent, la conversion d'une chaîne en tranche d'octets à l'aide de la syntaxe []byte(string) entraîne une copie de la mémoire.
Étape 2 : Utilisation de Unsafe
Pour empêcher la mémoire copie, des opérations dangereuses peuvent être utilisées. La fonction unsafe String peut être utilisée pour récupérer un pointeur vers les données de chaîne sous-jacentes.
<code class="go">import "unsafe" func unsafeGetBytes(s string) []byte { return (*[0x7fff0000]byte)(unsafe.Pointer( (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), )[:len(s):len(s)] }</code>
Explication :
Considérations supplémentaires :
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!