Я пытаюсь использовать привязки cairo (пакет Go), который определяет структуру оболочки с типом C, с функцией C, но не может заставить ее работать.
Пакет cairoопределяет контекст:
package cairo
...
type Context struct {
Ptr *C.cairo_t
}
...
Затем из основного пакета я хочу использовать его указатель:
package main
...
cr := cairo.Create(surf.Surface)
layout := C.pango_cairo_create_layout(cr.Ptr)
...
C.pango_cairo_create_layout
принимает *C.cairo_t
, то есть cr.Ptr
должно быть.Однако компилятор go не согласен:
./main.go:114:157: cannot use cr.Ptr (type *cairo._Ctype_struct__cairo) as type *_Ctype_struct__cairo in argument to func literal
Как видно, cr.Ptr
имеет тип *cairo.C.cairo_t
, а не *C.cairo_t
, то есть пространство имен пакета является частьювведите.
Я нашел https://github.com/golang/go/issues/13467,, который говорит об обходном пути, используя комбинацию пакета отражения и unsafe.Pointer
.Тем не менее, я не могу заставить его работать.
Как правильно «согнуть» это, чтобы он скомпилировал и работает?