将 cgo 与 typedef 变量一起使用

Using cgo with typedef variables

我正在创建一个项目,该项目使用由于现有库和速度而用 C 编写的密码学。尝试与 Cgo 交互时,我在使用 C 中创建的 typedef 时遇到了一些问题。下面是一个示例:

typedef unsigned char ec_scalar[32];

我能够成功创建 ec_point 变量,并使用接受 ec_point* 的函数。但是,每当我尝试使用通过正常 ec_point 传递的函数时,我都会收到错误消息:

cannot use pk2 (type C.ec_scalar) as type *C.uchar in argument to _Cfunc_secret_to_public

我似乎找不到可以轻松转换它的方法。我也不想重构我的代码来接受 ec_point*,因为 ec_point 已经是一个指针(因为它是一个 32 个字符的数组)

Go 的静态类型系统和类型安全不允许您隐式转换类型,也不会让数组退化为指针。您需要使用 unsafe 包手动转换它:

(*C.uchar)(unsafe.Pointer(pk2))