CGO中的C NULL类型
C NULL type in CGO
我有一个 C 函数,当发生异常时 returns NULL。我如何在 Go 中检查返回值是否为 NULL,因为它没有内置类型来表示 C NULL。下面是我的代码
retVal := C.myfunc()
if retVal == nil {
// handle the error
}
我认为你可以使用 nil
来测试 c 函数是否 returns 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)
}
我有一个 C 函数,当发生异常时 returns NULL。我如何在 Go 中检查返回值是否为 NULL,因为它没有内置类型来表示 C NULL。下面是我的代码
retVal := C.myfunc()
if retVal == nil {
// handle the error
}
我认为你可以使用 nil
来测试 c 函数是否 returns 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)
}