Тип C.long

Тип C.long в cgo используется для представления типа long из языка C. Он позволяет передавать целочисленные значения между Go и C-кодом, обеспечивая правильное соответствие размеров и диапазонов значений. В 64-битных системах long обычно занимает 8 байт, а в 32-битных - 4 байта.

Синтаксис

govar num C.long
num = 42

Пример

Давайте создадим переменную типа C.long и передадим ее в C-функцию:

gopackage 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)
}

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

go"Long value: 12345"

Пример

Давайте передадим значение типа C.long из C-функции обратно в Go:

gopackage main

/*
long getNumber() {
  return 9876;
}
*/
import "C"
import "fmt"

func main() {
  res := C.getNumber()
  fmt.Println(res)
}

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

go"9876"

Пример

Давайте преобразуем C.long в тип int64 для безопасной работы в Go:

gopackage 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)
}

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

go"105"

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

  • тип C.int,
    который соответствует типу int в языке C
  • тип C.char,
    который представляет символьный тип в C
  • тип C.float,
    который соответствует типу float в языке C
  • тип C.double,
    который представляет число с плавающей точкой двойной точности