Вызов 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-строки