Heim >Backend-Entwicklung >Golang >Wie kopiere ich Go-Strings mithilfe von CGO sicher in C-Char*-Zeiger?
Kopieren von Go-Strings in C-Char*-Zeiger mit CGO
Im Go-Bereich kann es zu Situationen kommen, in denen ein nahtloser Austausch erforderlich ist Daten zwischen Ihrem Go-Code und C-Bibliotheken oder -Anwendungen. Ein solches Szenario ist die Übertragung von Go-Strings in C-Zeichenzeiger (char *) mithilfe der Leistungsfähigkeit von CGO.
Herausforderung:
Es entsteht der Wunsch, ein Go zu kopieren string in ein char * über die magischen Fähigkeiten von CGO. Es bleibt die Frage: Kann dies mit dem folgenden Ansatz erreicht werden?
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
Lösung:
Während die Absicht nobel ist, ist der im Codeausschnitt dargestellte Ansatz fehl am Platz kurz. Laut der offiziellen CGO-Dokumentation besteht die richtige Methode zum Konvertieren eines Go-Strings in einen C-String in der Verwendung der C.CString-Funktion:
cstr = C.CString(str)
Es ist wichtig zu bedenken, dass C.CString freiwillig Speicher zuweist Du. Dieser Speicher wird jedoch nicht automatisch freigegeben, sodass dies Ihren sorgfältigen Bemühungen überlassen bleibt. Um diese Situation zu beheben, müssen Sie den zugewiesenen Speicher manuell freigeben, indem Sie explizit C.free aufrufen:
C.free(unsafe.Pointer(cstr))
Durch diesen Ansatz stellen Sie die ordnungsgemäße Entsorgung des zugewiesenen Speichers sicher und vermeiden Speicherlecks, die dazu führen würden Andernfalls verfolgen Sie Ihren Code.
Das obige ist der detaillierte Inhalt vonWie kopiere ich Go-Strings mithilfe von CGO sicher in C-Char*-Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!