Maison >développement back-end >Golang >Comment copier en toute sécurité des chaînes Go vers des pointeurs C char* à l'aide de CGO ?
Copier des chaînes Go vers des pointeurs C char* à l'aide de CGO
Dans le domaine de Go, vous pouvez rencontrer des situations où vous devez échanger de manière transparente données entre votre code Go et les bibliothèques ou applications C. Un de ces scénarios est le transfert de chaînes Go en pointeurs de caractères C (char *) en utilisant la puissance de CGO.
Défi :
Le désir surgit de copier un Go chaîne en un caractère * via les capacités magiques de CGO. La question persiste : cela peut-il être réalisé en utilisant l'approche suivante ?
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
Solution :
Bien que l'intention soit noble, l'approche présentée dans l'extrait de code tombe court. Selon la documentation officielle de CGO, la méthode correcte pour convertir une chaîne Go en chaîne C implique d'utiliser la fonction C.CString :
cstr = C.CString(str)
Il est important de garder à l'esprit que C.CString alloue obligatoirement de la mémoire pour toi. Cependant, il ne libère pas automatiquement cette mémoire, la laissant à vos efforts diligents. Pour remédier à cette situation, vous devez libérer manuellement la mémoire allouée en effectuant un appel explicite à C.free :
C.free(unsafe.Pointer(cstr))
En adoptant cette approche, vous garantissez la bonne élimination de la mémoire allouée et évitez les fuites de mémoire qui sinon hantez votre code.
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!