Maison >développement back-end >Golang >Comment créer en toute sécurité une tranche ou un tableau Go à partir d'un « unsafe.Pointer » ?
Question :
Donnée un pointeur dangereux vers un tableau, comment pouvons-nous créer un tableau ou une tranche à partir de celui-ci sans encourir le coût de la mémoire copie ?
Réponse :
Création d'une tranche à l'aide de Reflect :
L'approche recommandée consiste à utiliser le package Reflect pour créer un en-tête de tranche qui pointe vers les mêmes données sous-jacentes que celles non sécurisées pointeur.
// Create a slice header sh := &reflect.SliceHeader{ Data: p, // Unsafe pointer to the array Len: size, Cap: size, } // Use the slice header to create a slice data := *(*[]byte)(unsafe.Pointer(sh))
Création d'un tableau à l'aide de Reflect :
Pour créer un tableau (pointeur vers des éléments en mémoire contiguë) à partir d'un pointeur non sécurisé, nous pouvons d'abord créer une tranche puis prendre son adresse :
// Create a slice data := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ Data: p, Len: size, Cap: size, })) // Get the address of the slice (pointer to the first element) arr := (*[size]byte)(unsafe.Pointer(&data[0]))
Mises en garde et Avertissements :
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!