>  기사  >  백엔드 개발  >  Golang Cgo 란 무엇입니까?

Golang Cgo 란 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-12-03 09:20:034273검색

Golang Cgo 란 무엇입니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.