Accéder à un tableau C de const char* depuis Go via cgo
Implanter des tableaux de const char* dans le code Go via cgo peut être difficile . Pour résoudre ce problème, envisagez d'adopter une stratégie qui convertit le tableau C en tranche Go. Voici un exemple qui illustre cette approche :
import ( "fmt" "unsafe" "github.com/go-cgo/cgo" ) func main() { // You can adjust the `arraySize` constant to reflect the actual number of strings in your C array. const arraySize = 3 // Construct a Go slice from a pointer to the C array. The `&C.myStringArray` expression returns a pointer to the first element in the C array. cStrings := (*[1 << 30]*cgo.Char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] // Iterate over the Go slice and print each string. for _, cString := range cStrings { fmt.Println(cgo.GoString(cString)) } }
Cette approche repose sur la conversion du tableau C en une tranche Go à l'aide du transtypage de type. L'expression unsafe.Pointer(&C.myStringArray) renvoie un pointeur vers le premier élément du tableau C, qui est ensuite converti en pointeur vers une tranche Go.
En découpant le pointeur vers le tableau C, vous créez une tranche Go qui fait référence aux éléments sous-jacents du tableau C. Cette tranche peut être itérée et chaque élément peut être converti en chaîne Go à l'aide de la fonction cgo.GoString.
En utilisant cette méthode, vous pouvez accéder et travailler avec votre tableau C de const char* dans votre code Go , vous permettant de réutiliser les mêmes fichiers d'index de journalisation sur différentes plates-formes.
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!