CGO는 golang과 C 언어가 서로 호출할 수 있는 메커니즘을 제공합니다. 일부 타사 라이브러리에는 C/C++ 구현만 있을 수 있으며 이를 순수 golang으로 구현하는 것은 거대한 프로젝트일 수 있습니다. 이때 CGO가 유용합니다. (추천 학습: go)
CGO를 통해 golang에서 C 인터페이스를 호출할 수 있고, C++ 인터페이스를 C로 패키징하여 golang에 제공하여 호출할 수 있습니다.
호출된 C 코드는 소스코드 형태로 직접 제공되거나 정적 라이브러리나 동적 라이브러리로 패키징되어 컴파일 타임에 링크될 수 있습니다. 코드 격리를 용이하게 하는 정적 라이브러리를 사용하는 것이 좋습니다. 컴파일된 바이너리에는 동적 라이브러리 종속성이 없으며 릴리스에도 편리합니다.
CGO 사용 방법에 대한 구체적인 튜토리얼은 이 글에서 다루지 않습니다. 여기서는 CGO 사용 시 발생할 수 있는 함정을 피하기 위한 몇 가지 세부 사항을 주로 소개합니다.
매개변수 전달
기본 숫자형
Golang의 기본 숫자형 메모리 모델은 C 언어와 동일하며, 몇 바이트 연속(1/2/4/8바이트)입니다.
따라서 숫자 유형을 전달할 때 golang의 기본 숫자 유형을 해당 CGO 유형으로 직접 변환한 다음 이를 C 함수 호출에 전달할 수 있고 그 반대도 가능합니다.
package main /* #include <stdint.h> static int32_t add(int32_t a, int32_t b) { return a + b; } */ import "C" import "fmt" func main() { var a, b int32 = 1, 2 var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b))) fmt.Println(c) // 3 }
위 내용은 Golang Cgo 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!