Copier des chaînes Go vers des pointeurs de caractère C à l'aide de CGO
Lorsque vous travaillez avec CGO dans Go, une exigence courante est de copier une chaîne Go dans un pointeur de caractère C. Bien qu'il puisse sembler simple d'attribuer la chaîne Go au pointeur C, l'approche appropriée consiste à utiliser la fonction C.CString.
Tentative de copie incorrecte
Le code :
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
est incorrect car GoString est destiné à convertir des pointeurs de caractère C en chaînes Go, pas vice-versa versa.
Méthode de copie correcte
Selon la documentation CGO, vous devez utiliser C.CString pour convertir une chaîne Go en chaîne C :
cstr = C.CString(str)
Gestion de la mémoire
Notez que C.CString alloue de la mémoire pour la chaîne C mais ne la libère pas. Il est de votre responsabilité de libérer cette mémoire à l'aide d'un appel à :
C.free(unsafe.Pointer(cstr))
quand vous avez terminé avec la chaîne C.
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!