Я обертываю библиотеку C, у которой есть структура с полем данных void *, которое может использоваться для произвольного хранения данных. Каким будет лучший способ (если это возможно) обернуть это в идиоматическом Go?Golang (cgo) - Arbitrary void * interface
структура довольно просто:
typedef struct _Foo {
void * data;
} Foo;
Я надеялся сделать что-то вроде:
type Foo C.Foo
func (f *Foo) SetData(data interface{}) {
f.data = unsafe.Pointer(&data)
}
func (f *Foo) Data() interface{} {
return (interface{})(unsafe.Pointer(f.data))
}
Это не работает, и это явно неправильный подход в любом случае.
Я успешно установил данные void * с полем длины с использованием источника [] byte, но этот интерфейс без длины ускользает от меня.
Для любознательных конечной целью было это - https://github.com/boj/goenet - хотя все еще немного глючит, так берегитесь. – bojo