РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1593 of 1593 menu

Директива //export

Директива //export используется в пакете cgo для экспорта Go-функций, делая их доступными для вызова из C-кода. После директивы указывается имя экспортируемой функции. Экспортированная функция должна следовать определенным правилам: она не может иметь параметров-указателей на C-типы, содержащие Go-указатели, и не может возвращать такие типы. Директива действует только на функцию, следующую непосредственно за ней.

Синтаксис

//export FunctionName func FunctionName(params) returnType { // тело функции }

Пример

Рассмотрим базовый пример экспорта Go-функции для вызова из C:

package main /* #include <stdio.h> extern void GoFunction(void); void callGoFunction() { printf("Calling Go function from C\n"); GoFunction(); } */ import "C" import "fmt" //export GoFunction func GoFunction() { fmt.Println("Hello from Go function!") } func main() { C.callGoFunction() }

Результат выполнения кода:

"Calling Go function from C" "Hello from Go function!"

Пример с параметрами

Экспортированная функция может принимать параметры простых типов:

package main /* #include <stdio.h> extern int Add(int a, int b); void useAdd() { int result = Add(10, 20); printf("Result from Go: %d\n", result); } */ import "C" import "fmt" //export Add func Add(a, b C.int) C.int { return a + b } func main() { C.useAdd() }

Результат выполнения кода:

"Result from Go: 30"

Пример с возвратом строки

Для работы со строками необходимо использовать функции преобразования:

package main /* #include <stdio.h> #include <stdlib.h> extern char* GetMessage(void); void printMessage() { char* msg = GetMessage(); printf("Message: %s\n", msg); free(msg); } */ import "C" import "fmt" //export GetMessage func GetMessage() *C.char { msg := "Hello from Go with CGO" return C.CString(msg) } func main() { C.printMessage() }

Результат выполнения кода:

"Message: Hello from Go with CGO"

Смотрите также

  • директиву import C,
    которая подключает C-код в Go-программу
  • функцию C.CString,
    которая преобразует Go-строку в C-строку
  • функцию C.GoString,
    которая преобразует C-строку в Go-строку
  • функцию C.free,
    которая освобождает память, выделенную в C
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить