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

Вызов C-функций

Вызов C-функций в Go осуществляется с помощью пакета cgo. Это позволяет использовать существующий C-код, системные библиотеки или оптимизированные алгоритмы. В качестве параметров функции передаются аргументы, соответствующие типам C. Возвращаемое значение может быть преобразовано в типы Go или использовано напрямую как C.type.

Синтаксис

// #include <имя_заголовочного_файла.h> import "C" // Вызов функции result := C.имя_функции(аргументы)

Пример

Вызовем стандартную C-функцию pow из математической библиотеки. Первым параметром передаем основание, вторым — показатель степени:

package main // #include <math.h> import "C" import "fmt" func main() { base := C.double(2.0) exp := C.double(3.0) res := C.pow(base, exp) fmt.Println(res) }

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

8

Пример

Вызовем C-функцию для работы со строками. Функция strlen возвращает длину C-строки. В качестве параметра используем преобразованную строку:

package main // #include <string.h> import "C" import "fmt" func main() { str := C.CString("hello") length := C.strlen(str) fmt.Println(length) C.free(unsafe.Pointer(str)) }

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

5

Пример

Вызовем C-функцию, которая изменяет переданные данные. Функция sin из математической библиотеки:

package main // #include <math.h> import "C" import "fmt" func main() { val := C.double(0.5) res := C.sin(val) fmt.Println(res) }

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

0.479425538604203

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

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