C 언어와 Golang은 모두 일반적으로 사용되는 프로그래밍 언어입니다. 구문과 응용 시나리오가 다르지만 둘 다 고유한 장점과 단점이 있으므로 응용 프로그램 요구 사항에 따라 서로 다른 프로그래밍 언어가 선택됩니다. 하지만 C 언어와 Golang을 통합하려면 두 언어 간의 상호 운용성을 달성하는 방법을 이해해야 합니다.
이 글에서는 C 언어로 Golang 프로그램을 호출하는 방법을 소개하겠습니다. C 언어는 초기 프로그래밍 언어로 시스템 개발에 널리 사용되는 반면, Golang은 효율적인 동시성 성능으로 선호되는 최신 프로그래밍 언어입니다. 두 가지를 통합하면 각각의 장점을 고려하고 더 풍부한 기능을 갖춘 애플리케이션을 구현할 수 있습니다.
Prerequisites
C 언어로 Golang을 호출하기 전에 Golang이 환경에 설치되어 있는지 확인해야 합니다. 터미널에서 다음 명령어를 입력하여 확인할 수 있습니다.
$ go version
Golang 버전 정보가 터미널에 출력되면 설치가 성공한 것입니다.
Go 함수 호출
Golang은 C 프로그램에서 직접 사용할 수 있는 C 언어 호환 API를 제공합니다. 이 API를 사용하여 C 프로그램에서 Golang 함수를 호출할 수 있습니다. 단계는 다음과 같습니다.
//export
를 추가해야 합니다. 이는 C 프로그램에 대한 기능적 인터페이스를 노출합니다. package main import "C" //export Add func Add(x, y int) int { return x + y }
//export
。这样可以将函数接口暴露给C程序。typedef struct { uintptr_t p; } GoInt; typedef struct { uintptr_t p; int n; } GoString; typedef struct { uintptr_t p; int n; } GoSlice; typedef struct { uintptr_t p; uintptr_t len; uintptr_t cap; } GoSliceHeader; typedef struct { uintptr_t p; uintptr_t len; } GoStringHeader; typedef struct { uintptr_t p; int argc; void *argv; } GoArgs; typedef struct { uintptr_t p; int type; /* 0 = panic, 1 = error */ char *message; } GoError; typedef int (*AddFunc)(int, int); AddFunc NewAddFunc() { static GoInt Add; static int once = 1; if (once) { once = 0; // Call the "Add" function implemented in Go const char* name = "Add"; void* symbol = dlsym(RTLD_DEFAULT, name); if (symbol == NULL) { return NULL; } Add.p = (uintptr_t)symbol; } return (AddFunc)Add.p; }
在这个例子中,我们定义了一个Add
函数,接受两个整数并返回它们的和。通过//export
命令,我们将这个函数的接口暴露给了C程序。
int main() { AddFunc add = NewAddFunc(); if (add == NULL) { printf("Failed to find 'Add' function. "); return -1; } int result = add(1, 2); printf("The result is %d. ", result); return 0; }
Add
了。$ gcc -o cgo_example cgo_example.c -Wl,-rpath,$GOPATH/src/github.com/YourUserName/YourProjectName
在这个例子中,我们定义了NewAddFunc
来获取Add
函数的函数指针。如果没有成功获取到函数指针,则输出一条错误信息,并退出程序。如果获取到了函数指针,则我们可以直接通过它来调用Add
函数,输入两个整数参数,并通过printf
이 예에서는 두 개의 정수를 받아들이고 그 합계를 반환하는 Add
함수를 정의합니다. //export
명령을 통해 이 함수의 인터페이스를 C 프로그램에 노출합니다.
다음으로 Golang 함수를 호출할 때 핸들을 저장하기 위해 C 프로그램에서 함수 포인터를 정의해야 합니다.
Add
를 호출할 수 있습니다. 이 예에서는 Add
함수의 함수 포인터를 가져오기 위해 NewAddFunc
를 정의합니다. 함수 포인터를 성공적으로 얻지 못하면 오류 메시지가 출력되고 프로그램이 종료됩니다. 함수 포인터를 얻으면 이를 통해 Add
함수를 직접 호출하고, 두 개의 정수 매개변수를 입력하고, printf
함수를 통해 계산 결과를 출력할 수 있습니다.
참고: 컴파일하기 전에 컴파일된 프로그램이 Golang 라이브러리에 올바르게 링크될 수 있도록 다음 매개변수를 명령줄에 추가해야 합니다.
rrreee🎜결론🎜🎜위 단계를 통해 다음에서 쉽게 호출할 수 있습니다. C 프로그램의 Golang 기능을 통해 기존 C 프로그램에서는 구현하기 어려운 기능을 구현합니다. 동시에 우리는 이 프로세스를 수행할 때 올바른 데이터 전송과 올바른 유형 일치를 보장하기 위해 함수 포인터와 데이터 구조를 정의해야 한다는 점도 확인했습니다. 실제 적용에서는 실제 상황에 따라 유연하게 조정하고 수정해야 합니다. 🎜위 내용은 c golang을 호출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!