我想了解cgo。我可以从go和其他方式调用C函数。我尝试过做一些不同的事情而且没有用。
去代码:
// main.go
package main
/*
extern void myfunction(GoSlice s);
*/
import "C"
func main() {
var s [5]byte
C.myfunction(s[:])
}
C代码:
// main.c
#include "_cgo_export.h"
#include <stdint.h>
void myfunction(GoSlice s)
{
for (int i = 0; i < s.len; i++)
printf("%hhu ", ((uint8_t *)s.data)[i]);
}
编译失败,因为在main.go中C函数声明时未定义GoSlice。另外,我不能在main.go中包含_cgo_export.h来获取定义。有什么方法可以让这个工作吗?请注意,我可以使用C兼容的数据类型来使用该功能。但我想在这里直接使用go数据类型。