CGO를 사용하여 Go 문자열을 C 문자* 포인터에 복사
Go 영역에서는 원활하게 교환해야 하는 상황에 직면할 수 있습니다. Go 코드와 C 라이브러리 또는 애플리케이션 간의 데이터. 그러한 시나리오 중 하나는 CGO의 강력한 기능을 사용하여 Go 문자열을 C 문자 포인터(char *)로 전송하는 것입니다.
도전 과제:
Go를 복사하고 싶은 욕구가 생깁니다. CGO의 마법 기능을 통해 * 문자열을 문자로 변환합니다. 질문은 계속됩니다. 다음 접근 방식을 사용하여 이를 달성할 수 있습니까?
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
해결책:
의도는 훌륭하지만 코드 조각에 제시된 접근 방식은 실패합니다. 짧은. 공식 CGO 문서에 따르면 Go 문자열을 C 문자열로 변환하는 올바른 방법은 C.CString 함수를 활용하는 것입니다.
cstr = C.CString(str)
C.CString은 Go 문자열에 메모리를 의무적으로 할당한다는 점을 명심하는 것이 중요합니다. 너. 그러나 이 메모리는 자동으로 해제되지 않으며 사용자의 노력에 달려 있습니다. 이 상황을 해결하려면 C.free를 명시적으로 호출하여 할당된 메모리를 수동으로 해제해야 합니다.
C.free(unsafe.Pointer(cstr))
이 접근 방식을 채택하면 할당된 메모리를 적절하게 폐기하고 메모리 누수를 방지할 수 있습니다. 그렇지 않으면 코드를 괴롭힐 수 있습니다.
위 내용은 CGO를 사용하여 Go 문자열을 C char* 포인터에 안전하게 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!