我想使用Go在C结构中设置uint8_t *。Go中的数据来自ELF,是一个字节片。这是我目前收到的错误:
cannot use &buf[0] (type *byte) as type *_Ctype_uchar in assignment
使用此代码:
args.vm_snapshot_data = &buf[0]
我该怎么办?
[当我使用适当的演员表时:args.vm_snapshot_data = (*C.uint8_t)(&buf[0])
我收到此错误:panic: runtime error: cgo argument has Go pointer to Go pointer
Golang计数类型,而不是它们的兼容性。而且只有一种方法可以将unsafe.Pointer
作为原始值来覆盖该位置。
args.vm_snapshot_data = (*C.uint8_t)(unsafe.Pointer(&buf[0]))
如果不确定在C端使用时buf slice是否在Go端仍然有效(垃圾收集器可能会丢弃它,那么您必须使用复制并手动将其丢弃。
args.vm_snapshot_data = (*C.uint8_t)(C.CBytes(buf))
...
C.free(unsafe.Pointer(args.vm_snapshot_data))