我使用Cgo从Go使用C库,除了回调之外都是好的.库有回调设置器,它接受指向回调函数的指针.回调函数本身用go编写并使用Cgo语法导出.
问题:我可以用char *参数制作和导出函数,但不能用const char *.
代码说明:
test.go:
package main
/*
typedef void (*cb_func)(const char *, int);
void callback(cb_func);
void myFunc(const char *, int);
*/
import "C"
import (
"fmt"
"unsafe"
)
//export myFunc
func myFunc(buf *C.char, ln C.int) {
fmt.Printf("Got: %s\n", C.GoStringN(buf, ln))
}
func main() {
C.callback((C.cb_func)(unsafe.Pointer(C.myFunc)))
}
Run Code Online (Sandbox Code Playgroud)
test.c:
typedef void (*cb_func)(const char *, int);
void callback(cb_func cb) {
cb("test", 4);
}
Run Code Online (Sandbox Code Playgroud)
输出来自go build:
In file included from $WORK/test/_obj/_cgo_export.c:2:0:
./test.go:54:13: error: …Run Code Online (Sandbox Code Playgroud)