Тип C.long
Тип C.long в cgo используется для представления
типа long из языка C. Он позволяет передавать
целочисленные значения между Go и C-кодом, обеспечивая
правильное соответствие размеров и диапазонов значений.
В 64-битных системах long обычно занимает 8 байт,
а в 32-битных - 4 байта.
Синтаксис
var num C.long
num = 42
Пример
Давайте создадим переменную типа C.long
и передадим ее в C-функцию:
package main
/*
#include <stdio.h>
void printLong(long val) {
printf("Long value: %ld\n", val);
}
*/
import "C"
func main() {
var num C.long = 12345
C.printLong(num)
}
Результат выполнения кода:
"Long value: 12345"
Пример
Давайте передадим значение типа C.long
из C-функции обратно в Go:
package main
/*
long getNumber() {
return 9876;
}
*/
import "C"
import "fmt"
func main() {
res := C.getNumber()
fmt.Println(res)
}
Результат выполнения кода:
"9876"
Пример
Давайте преобразуем C.long в тип int64
для безопасной работы в Go:
package main
/*
long multiply(long a, long b) {
return a * b;
}
*/
import "C"
import "fmt"
func main() {
a := C.long(15)
b := C.long(7)
res := C.multiply(a, b)
goValue := int64(res)
fmt.Println(goValue)
}
Результат выполнения кода:
"105"