Bahasa C dan Golang adalah kedua-dua bahasa pengaturcaraan yang biasa digunakan Walaupun ia berbeza dari segi sintaks dan senario aplikasi, kedua-duanya mempunyai kelebihan dan kelemahan tersendiri, jadi bahasa pengaturcaraan yang berbeza akan dipilih untuk keperluan aplikasi yang berbeza. Tetapi jika kita ingin mengintegrasikan bahasa C dan Golang, kita perlu memahami bagaimana untuk mencapai kesalingoperasian antara kedua-dua bahasa.
Artikel ini akan memperkenalkan cara memanggil program Golang dalam bahasa C. Bahasa C ialah bahasa pengaturcaraan awal dan digunakan secara meluas dalam pembangunan sistem, manakala Golang ialah bahasa pengaturcaraan yang lebih baharu yang digemari untuk prestasi konkurensi yang cekap. Penyepaduan kedua-duanya membolehkan kami mengambil kira kelebihan masing-masing dan melaksanakan aplikasi dengan fungsi yang lebih kaya.
Prasyarat
Sebelum kita mula cuba memanggil Golang dalam bahasa C, kita mesti memastikan bahawa Golang telah dipasang di persekitaran. Anda boleh memasukkan arahan berikut dalam terminal untuk menyemak:
$ go version
Jika maklumat versi Golang boleh dikeluarkan dalam terminal, ini bermakna pemasangan telah berjaya.
Fungsi Memanggil Go
Golang menyediakan API serasi bahasa C, yang boleh digunakan terus dalam program C. Kita boleh menggunakan API ini untuk memanggil fungsi Golang daripada program C. Berikut ialah langkah-langkahnya:
//export
sebelum nama fungsi. Ini mendedahkan antara muka berfungsi kepada program C. package main import "C" //export Add func Add(x, y int) int { return x + y }
Dalam contoh ini, kami mentakrifkan fungsi Add
yang menerima dua integer dan mengembalikan jumlahnya. Melalui arahan //export
, kami mendedahkan antara muka fungsi ini kepada program 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
. 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; }
Dalam contoh ini, kami mentakrifkan NewAddFunc
untuk mendapatkan penuding fungsi bagi fungsi Add
. Jika penuding fungsi tidak berjaya diperoleh, mesej ralat akan dikeluarkan dan program akan keluar. Jika penuding fungsi diperoleh, kita boleh memanggil terus fungsi Add
melaluinya, masukkan dua parameter integer, dan keluarkan hasil pengiraan melalui fungsi printf
.
Nota: Sebelum menyusun, anda perlu menambah parameter berikut pada baris arahan untuk memastikan program yang disusun boleh memaut dengan betul ke perpustakaan Golang:
$ gcc -o cgo_example cgo_example.c -Wl,-rpath,$GOPATH/src/github.com/YourUserName/YourProjectName
Kesimpulan
Melalui Langkah-langkah di atas, kita boleh dengan mudah memanggil fungsi Golang dalam program C, dengan itu merealisasikan fungsi yang sukar dicapai dalam program C asal. Pada masa yang sama, kami juga telah melihat bahawa semasa melaksanakan proses ini, kami perlu menentukan penunjuk fungsi dan struktur data untuk memastikan pemindahan data yang betul dan padanan jenis yang betul. Dalam aplikasi praktikal, kita perlu menyesuaikan dan mengubah suai secara fleksibel mengikut situasi sebenar.
Atas ialah kandungan terperinci c Cara memanggil golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!