Я оборачиваю библиотеку C, имеющую структуру с полем данных void*, которое можно использовать для произвольного хранения данных. Как лучше всего (если это вообще возможно) обернуть это в идиоматический Go?
Структура довольно проста:
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, но этот интерфейс без длины ускользает от меня.