[golang] cgo에서 Go와 C 언어 간의 버퍼 전달
·
Language/Go
서론Go 언어는 간결하고 효율적인 프로그래밍을 위한 훌륭한 선택이다. 그러나 특정 작업에서는 Pure Go만으로는 한계에 부딪히기도 한다. 특히 미디어 트랜스코딩과 같은 작업에서는 적절한 라이브러리가 없어 C와 같은 저수준 언어의 도움을 받아야 할 때가 있다. 이러한 이유로 나는 Go와 C 간의 상호작용을 구현하기 위해 cgo를 사용하여 버퍼를 전달하는 작업을 했었다. 이 글에서는 cgo를 사용하여 Go와 C 간의 버퍼를 전달하는 방법을 간략하게 정리해본다. Go에서 사용하던 버퍼를 C로 전달package main// #include //// void Go2C(unsigned char* buf, int len) {// for (int i=0; i출력 결과4A 61 65 2D 53 75 6E 67 ..
[golang] 동일한 문자열 메모리 공유
·
Language/Go
같은 문자열은 같은 주소Go 언어에서 동일한 값의 문자열을 가진 string 변수가 여러 개 있을 경우 같은 메모리를 공유한다.package mainimport ( "fmt" "unsafe")func main() { owner := "Jae-Sung" author := "Jae-Sung" ownerAddr := (*[2]uintptr)(unsafe.Pointer(&owner))[0] authorAddr := (*[2]uintptr)(unsafe.Pointer(&author))[0] fmt.Printf("owner addr: %x\n", ownerAddr) fmt.Printf("author addr: %x\n", authorAddr)}출력 결과owner addr: 4b0514author addr: 4b05..