CGO中的C NULL类型

时间:2019-05-29 03:51:08

标签: go cgo

我有一个C函数,在发生异常时返回NULL。我该如何在Go中检查返回的值是否为NULL,因为它没有内置类型来表示C NULL。下面是我的代码

retVal := C.myfunc()

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

1 个答案:

答案 0 :(得分: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)
}