Тип C NULL в CGO

У меня есть функция C, которая возвращает NULL при возникновении исключения. Как я могу проверить, является ли возвращаемое значение NULL или нет в Go, поскольку у него нет встроенных типов для представления C NULL. Ниже мой код

retVal := C.myfunc()

if retVal == nil {
  // handle the error
}


person srimaln91    schedule 29.05.2019    source источник


Ответы (1)


Я думаю, вы можете использовать nil, чтобы проверить, возвращает ли функция c NULL. Попробуйте следующий код:

package main

/*
#include <stdio.h>
#include <stdlib.h>

int* cfunc(int i) {
    if (i == 0) {
        return NULL;
    }

    int *p = (int*)malloc(sizeof(int));
    *p = 100;
    return p;
}
*/
import "C"

import "fmt"
import "unsafe"

func call_cfunc(i int32) {
    ret := C.cfunc(C.int(i))
    if ret == nil {
        fmt.Println("nil")
    } else {
        fmt.Println(*ret)
        C.free(unsafe.Pointer(ret))
    }
}

func main() {
    call_cfunc(0)
    call_cfunc(1)
}
person for_stack    schedule 29.05.2019
comment
Я использовал этот метод и просто хотел узнать его обоснованность. Спасибо. - person srimaln91; 29.05.2019